/*
 * json
 *
 * Copyright (c) 2008 hehuihai	(ocean)
 *
 * version 0.2
 *
 * Date: 2008-03-06 10:50:27
 */
(function($){
	/*	
	 * get tags id/name and value in form ,return json
	 * 
	*/	
	$.fn.getJsonToPhpArray=function(){
		var params=arguments[0] || {};
		params=$.extend({
			type:'wrap',
			tags:'input,select,textarea',				//input[type!='file'],select,textarea		(当有文件上传的表单中)
			groupTag:'',								//当获取二表格数据时的分组标签		//#variation_price_table1 tbody tr[sort!='template']
			groupTag_tags:'',							//为groupTag 设置获取的分组标签tag
			add:{}
		},params);
		
		//areatext content symbol convert
		function text2Html(str){
			if(str=='' || str==undefined)return '';
			
			str	= str+'';
			str = str.replace(/\r\n/g, "<br/>");
			str = str.replace(/\r/g, "<br/>"); 
			str = str.replace(/\n/g, "<br/>"); 
			
			str = str.replace(/\"/g, '\\"');
			str = str.replace(/\'/g, "\\'");
			
			return str;
		}
		
		var self=this;
		var form1=[];
		var form2=[];
		var o=null;
		
		if(params.groupTag_tags==''){
			params.groupTag_tags=params.tags
		}
		
		if(params.type=='wrap'){
			$.each(self,function(k,rowObj){
				//form[k]=[];
				$.each($(rowObj).find(params.tags),function(i,obj){
					o=$(obj);
					form1[i]=[];
					form1[i]['field']=o.attr('name')?o.attr('name'):o.attr('id');
				//	form1[i]['value']=text2Html(o.val());
					
					var val='';
					if(obj.tagName.toLowerCase()=='input' && (o.attr('type') || '').toLowerCase()=='checkbox'){
						val=(obj.checked)?(o.val() || ''):'';
					}else{
						val=o.val() || '';
					}
					
					form1[i]['value']=text2Html(val);
				});
			});
			
			//che2(self.find(params.groupTag).length)
			$.each(self.find(params.groupTag),function(k,rowObj){
				form2[k]=[];
				$.each($(rowObj).find(params.groupTag_tags),function(i,obj){
					o=$(obj);
					form2[k][i]=[];
					form2[k][i]['group']=(o.attr('group'))?o.attr('group'):'seData';		//默认为"seData";
					form2[k][i]['field']=o.attr('name')?o.attr('name'):o.attr('id');
					form2[k][i]['value']=text2Html(o.val());
				});
				
			});
		}
		//che2(form2)
		
//		if(params.type=='attr'){
//			if(params.tags){
//				var attrAry=params.tags.split(',');
//				$.each(self,function(k,rowObj){
//					form1[k]=[];
//					$.each(attrAry,function(i,attr){
//						form1[k][i]=[];
//						form1[k][i]['field']=attr;
//						form1[k][i]['value']=$(rowObj).attr(attr)||'';
//					});
//				});
//			}
//		}
		//che2(form1)
		
		var arr=[];
		var para=params.add;
		
		if((typeof(para)=='object' && para.constructor==Object)){
			for(k in para){
				arr.push("\"sePara["+k+"]\":\""+para[k]+"\"");
			}
		}
		
		if(form1.length){
			for(var i=0;i<form1.length;i++){
				arr.push("\"sePara["+form1[i]['field']+"]\":\""+form1[i]['value']+"\"");
			}
		}
		
		if(form2.length){
			for(var k=0;k<form2.length;k++){
				for(var i=0;i<form2[k].length;i++){
					arr.push("\""+form2[k][i]['group']+"["+k+"]["+form2[k][i]['field']+"]\":\""+form2[k][i]['value']+"\"");
				}
			}
		}
		
		//che3(arr)
		
		eval("var formData={"+(arr.length?arr.join(','):"")+"};");
		
		return formData;
	};
	
	//public function
	function json_checkType(val){
		switch(typeof(val)){
			case 'string':
				val="\""+val+"\"";
				break;
			case 'number':
				val=val;
				break;
			case 'boolean':
				val=val;
				break;
			default:
				val="\""+val+"\"";
		}
		return val;
	};
	
	function json_isArrayObject(d){
		if(!d)return false;
		return (typeof(d)=='object' && (d.constructor==Array || d.constructor==Object));
	};
	
	function json_isHaveChildrenArray(d){
		if(!json_isArrayObject(d))return false;
		for(j in d){
			if(json_isArrayObject(d[j])){
				return true;
			}
		}
		return false;
	};
	
	/*	
	 * json data to js array data
	 * 
	*/	
	$.jsonToJsArray=function(dataObj){
		var ds=[];
		ds.push("var arr=[];");
		function createArr(data,name){
			if(!json_isArrayObject(data)){
				ds.push(name+"="+json_checkType(data)+";");
			}else{
				ds.push(name+"=[];");
				for(k in data){
					if(!json_isArrayObject(data[k])){
						ds.push(name+"[\""+k+"\"]="+json_checkType(data[k])+";");
					}else{
						if(!json_isHaveChildrenArray(data[k])){
							ds.push(name+"[\""+k+"\"]=[];");
							for(i in data[k]){
								ds.push(name+"[\""+k+"\"][\""+i+"\"]="+json_checkType(data[k][i])+";");
							}
						}else{
							createArr(data[k],name+"[\""+k+"\"]");
						}
					}
				}
			}
		};
		for(key in dataObj){
			createArr(dataObj[key],"arr[\""+key+"\"]");
		}
		//che(ds);
		eval(ds.join('').replace(/((\r)|(\n))/g,''));
		return arr;
	};
	
	/*	
	 * js object to special data format this can submit php and it can convert to php array
	 * 
	*/	
	$.jsonToPhpArray=function(dataObj){
		var ds=[];
		function createArr(data,name){
			if(!json_isArrayObject(data)){
				ds.push("\""+name+"\":"+json_checkType(data)+"");
			}else{
				for(k in data){
					if(!json_isArrayObject(data[k])){
						ds.push("\""+name+"["+k+"]\":"+json_checkType(data[k])+"");
					}else{
						if(!json_isHaveChildrenArray(data[k])){
							for(i in data[k]){
								ds.push("\""+name+"["+k+"]["+i+"]\":"+json_checkType(data[k][i])+"");
							}
						}else{
							createArr(data[k],name+"["+k+"]");
						}
					}
				}
			}
		};
		for(key in dataObj){
			createArr(dataObj[key],key);
		}
		eval("var reData={"+(ds.length?ds.join(','):'')+"};");
		return reData;
	};
	
	
	
	

	


})(jQuery);


