//jQuery custom extend method
(function($){
	/*	
	 * get tags id/name and value in form ,return json
	 * 
		$('#myform').getJsonToPhpArray({
			type:'wrap',							//操作类型:'wrap' / 'attr'							(wrap:获取wrap里的标签; attr:获取一个标签的属性值)
			tags:'input,select,textarea',			//设置筛选的input条件(默认'input,select,textarea')		(当type='attr'时,则表示获取标签的属性名)
			add:{}									//追加参数
		});
	 * 
	 * example:
	 * a.$('#myform').getJsonToPhpArray();
	 * b.
		 $('#myform').getJsonToPhpArray({
				tags:'input,select'
			});
	 
	 * c.
		 $('#myform').getJsonToPhpArray({
				groupTag:'',
				tags:'input,select',
				add:{
					actionType:'aaa'
				}
			});
	*/	
	$.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 '';
			
			//var str='';
			str = str.replace(/\"/g, "");
			
			str = str.replace(/\r\n/g, "<br/>");
			str = str.replace(/\r/g, "<br/>"); 
			str = str.replace(/\n/g, "<br/>"); 
			str = str.replace(/\t/g, "");
			//str = str.replace(/<BR>/gi,"\r\n");
			// str = str.replace(/<[^>]+?>/g,"");
			// str = str.replace(/&nbsp;/g, " ");
			// str = str.replace(/&gt;/g, ">");
			// str = str.replace(/&lt;/g, "<");
			// str = str.replace(/&amp;/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());
					
					form1[i]['value']=text2Html(o.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);

