﻿/*
Depends
	util.js
	jQuery.js(1.3.2),
	ui.js
*/
(function($){
	($).ajaxSetup ({
    async: false
	});
	/*
	$.getScript("../js/page.js");
	$.getScript(project+"/js/table.js");
	$.getScript(project+"/js/data.js");
	$.getScript(project+"/js/list.js");
	$.getScript(project+"/js/ui.file.js");
	*///用于表单提交
	//编译用到的方法
	var dataCompile = {
			//编译主要操作
			dataCompile:{
				//编译页面 设计规则为先编译页面加载数据 然后编译ui生成控件,ui控件的初始化数据缓存在 obj.data("data")里
				compile:function(par){
					$.ebm.util.saveOldHtml("ebm_list","ebm_data","ebm_table","ebm_form");	
					if(!par)par = $("body");
					$(".ebm_data",par).each(function(i,n){
						$.ebm.dataCompile.data($(n));
						$(n).show();
					});	
					$(".ebm_list",par).each(function(i,n){						 
						$.ebm.dataCompile.list($(n));
						$(n).show();
					});	
					$(".ebm_table",par).each(function(i,n){
						$.ebm.dataCompile.table($(n));
						$(n).show();
					});
					$(".ebm_js",par).each(function(i,n){
						$.ebm.dataCompile.js(n);	
					});
					//表单提交操作
					$(":submit",par).live("click",function(i,n){
						var $p = $($(this).parents(".ebm_form")); //找出submit按钮 类为ebm_form的祖先元素
						if($p.length == 1){
							$.ebm.dataCompile.form( $p );
							return false;
						}
					});
					//加载ebm_form表单ds
					$(".ebm_form",par).each(function(i,n){
						$.ebm.dataCompile.data(n);
					});
				},
				//data 数据基本格式显示
				data:function($n){
					$n = $($n);
					if(!$n.attr("ds"))return;
					var cache = ($n.attr('cache')?$n.attr('cache'):1)==1?true:false;//是否缓存 默认为不缓存  调用 cache=1
					var async = ($n.attr('async')?$n.attr('async'):0)==1?true:false;//是否异步操作 默认为异步操作  调用 async=1	
					($n.get()[0].refresh = function(){
						$n.attr("ds",$.ebm.util.replaceByPar($n.attr("ds")) );
						$n.html( $.ebm.util.replaceByPar( $n.html() ) );//编译data对象中的%{}%
						dataAjax();
					})();
					function dataAjax(){
						$.ajax({
					 	 cache: cache,
					 	 type: "post",
					   url: $.ebm.util.url.unique( ACT.get($n.attr("ds")) ),
					   dataType: 'json',
					   async: async,
					   beforeSend: function(XMLHttpRequest){
					   		//$.ebm.util.doEvent($n.attr("onload"))
					   },
					   success: function(d){
					   		var cfg = {data:'', element:$n.get()[0]};			
					   		if(d && d.root && d.root.status==2){
					   			$.ebm.util.sessionTimeOut && $.ebm.util.sessionTimeOut();
					   			return;
					   		}   			
					   		if((d && d.root && d.root.rows && d.root.rows.row)){
					   			$n.data("data",$.ebm.util.clone(d.root.rows.row));
					   			$.ajax.text = d.root.rows.row;	//保存当前ajax返回的值
						   		$.ajax.element = $n;
					   			cfg = {data:d.root.rows.row, element:$n.get()[0]};			   			
					   		}	
					   		$.ebm.data.create(cfg);	
					   		$n.show();
					   		$.ebm.util.doEvent($n.attr("onload"))
					   		//$.ebm.util.doEvent($n.attr("onsucceed"));	 当ebm_form加载时会冲突
					   }
					 	});	
					}		
				},
				//list显示数据
				list:function($n){
					$n = $($n);
					if(!$n.attr("ds"))return;
					var cache = ($n.attr('cache')?$n.attr('cache'):1)==1?true:false;//是否缓存 默认为不缓存  调用 cache=1
					var async = ($n.attr('async')?$n.attr('async'):0)==1?true:false;//是否异步操作 默认为异步操作  调用 async=1	
					var row = $n.attr('row')?$n.attr('row'):20;//限定循环的行
					var consultRow = $n.attr('consultRow')?$n.attr('consultRow'):0;//设定从第几行循环
					($n.get()[0].refresh = function(){
						$n.attr("ds",$.ebm.util.replaceByPar($n.attr("ds")) );
						listAjax();
					})();
					function listAjax(){
						$.ajax({
					 	 cache: cache,
					 	 type: "post",
					   url: $.ebm.util.url.unique( ACT.get($n.attr("ds")) ),
					   dataType: 'json',
					   async: async,
					   beforeSend: function(XMLHttpRequest){
					   		$.ebm.util.doEvent($n.attr("onload"))
					   },
					   success: function(d){
					   		var cfg = {data:'', element:$n.get()[0], consultRow:consultRow, row:row};
					   		if(d && d.root && d.root.status==2){
					   			$.ebm.util.sessionTimeOut && $.ebm.util.sessionTimeOut();
					   			return;
					   		} 
					   		if((d && d.root && d.root.rows && d.root.rows.row)){
					   			$.ajax.text = d.root.rows.row;	//保存当前ajax返回的值
						   		$.ajax.element = $n;
						   		$n.data("data",$.ebm.util.clone(d));
						   		cfg = {data:$.ebm.util.toArray(d.root.rows.row), element:$n.get()[0], consultRow:consultRow, row:row};
					   		}
					   		$.ebm.list.create(cfg);	
					   		$.ebm.util.clearCompile($n.get()[0]);
					   		$n.show();						   		
					   		$.ebm.util.doEvent($n.attr("succeed"));
					   }
					 	});	
					}		
				},
				//table分页显示数据
				table:function($n){
					$n = $($n);
					if(!$n.attr("ds"))return;
					if( !$n.data("oldHtml") ){
						$n.data("oldHtml",$n.clone(true).get()[0]);	
					}
					var me = this;
					var cache = ($n.attr('cache')?$n.attr('cache'):1)==1?false:true;//是否缓存 默认为缓存  调用 cache=1
					var async = ($n.attr('async')?$n.attr('async'):0)==1?true:false;//是否异步操作 默认为异步操作  调用 async=1	
					var consultRow = $n.attr('consultRow')?$n.attr('consultRow'):1;//设定从第几行循环
					var size = $n.attr('size') || 20; //每页条数
					var index;// = $.ebm.getWinTemp(n.uniqueID+"pageIndex") || 1; //当前页
					var jsonData; //分页参数	
					var oldPageNum=0;
					($n.get()[0].refresh = function(index){
						if($n.data("data"))
						{
        						oldIndex = parseInt($n.data("data").root.page.index);
        						oldTotal = parseInt($n.data("data").root.page.totalCount);
        						oldTotalPage = parseInt($n.data("data").root.page.totalPage);
        						oldSize = parseInt($n.data("data").root.page.size);
        						
        						if(oldIndex == 1 || oldIndex == 0)
        						{
              							if( oldTotal > oldSize)
              							{
              								oldPageNum = oldSize;
              							}
              							else
              							{
              								oldPageNum = oldTotal;
              							}
        						}
        						else
        						{
    								       if( oldTotal > oldSize*oldIndex)
              						 {
              								oldPageNum = oldSize;
              							}
              							else
              							{
              								oldPageNum = oldTotal-(oldIndex-1)*oldSize;
              							}
        								
        						}
							}
						$n.attr("ds",$.ebm.util.replaceByPar($n.attr("ds")) );
						if(index){
							$.ebm.util.temp("tableIndex",index);
						}else{
							$.ebm.util.temp("tableIndex","");
						}		
						if( $n.attr("saveIndex") ){
							if(index === undefined) index = $.ebm.util.temp($n.attr('uniqueID')+"pageIndex") || 1;
							$.ebm.util.temp($n.attr('uniqueID')+"pageIndex",index);	
						}
						index = index || 1;
						jsonData = $.ebm.util.objToJson( {root:{page:{ index:index,size:size }}} ) ; //分页参数	
						tableAjax();	
					})();
					function tableAjax(){
						$.ajax({
						 	 cache: cache,
						 	 type: "post",
						 	 async: async,
						   url: $.ebm.util.url.unique( ACT.get($n.attr('ds')) ),
						   beforeSend: function(XMLHttpRequest){
						   		XMLHttpRequest.send( jsonData );
						   },
						   dataType: 'json',
						   processData: false,
				   		 data: "",
						   success: function(d){
						   		$n.data('compiled',true);
						   		$n.data("data",$.ebm.util.clone(d));
						   		if(d && d.root && d.root.status==2){
						   			$.ebm.util.sessionTimeOut && $.ebm.util.sessionTimeOut();
						   			return;
						   		} 
						   		if((d && d.root && d.root.rows && d.root.rows.row)){
						   			var oldEle = $n.data("oldHtml");
							   		var cfg = {data:$.ebm.util.toArray(d.root.rows.row), element:$n.get()[0], oldElement:oldEle, consultRow:consultRow};	
							   		$.ebm.table.create(cfg);		
							   		$.ebm.util.clearCompile($n.get()[0]);
							   		$n.show();
						   		}else{
						   			  if( oldPageNum>1)
						   		  	{
      						   				for(var i=1 ; i<=oldPageNum ;i++)
      						   			 {
      						   				$($n.get()[0].rows[i] ).children().remove();
      						   				}
						   				
						   				}
						   			else
						   				{
						   					$($n.get()[0].rows[consultRow] ).children().remove();
						   					}
						   			
						   			$n.show();
						   		}
				   		 		$(".ebm_page").each(function(pageI,page){
										if( $(page).attr('from') && $(page).attr('from') == $n.attr('id') ){
											var cfg = {element:page};
								   		$.ebm.page.create(cfg);	
										}
									});
						   		$.ebm.util.doEvent($n.attr("onload"));	
						   }
						 });	
					}	
				},
				//form表单提交
				form:function($n){			
					$n = $($n);
					/*
					var ajax = window.ActiveXObject?  new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();
					ajax.open('POST', ACT.get(p.action), false);
					ajax.send( escape("{root:{rows:{row:" + jsonData + "}}}") );		
					*/
					if($n.length > 1)return;
					if($n.attr('action')){
						//先提交当前form中非异步上传的文件域
						$.ebm.ui.file_async( $n );
						//监听文件是否上传成功
						var t = setInterval(function(){
							var fileFlag = $.ebm.util.temp("upload_file");
							if( $(".ebm_file",$n).length == 0){
								clearInterval(t);
							}
							if( fileFlag == 0 ){
								return;	
							}else if( fileFlag == 3 ){
								$.ebm.ui.showTip("文件上传失败!!");
								$.ebm.util.temp("upload_file",null);
								clearInterval(t);
								return;	
							}
							if(fileFlag == 2){
								$.ebm.ui.showTip("文件上传成功!!");	
								$.ebm.util.temp("upload_file",null);
								clearInterval(t);
							}
							if(!fileFlag){
								clearInterval(t)	
							}
							
							//console.info( $("#pid").data("data") );
							var action = $n.attr('action');
							if(!$n.attr("successMsg"))$n.attr("successMsg","操作成功");
							if(!$n.attr("errorMsg"))$n.attr("errorMsg","操作失败");
							action = $.ebm.util.replaceByPar(action);
							var jsonData  = $.ajax.jsonData = formElement($n);
							jsonData = $.ebm.util.objToJson( jsonData );
							$.ajax({
								 type: 'POST',
								 async: false,
							   url: $.ebm.util.url.unique( ACT.get(action) ),
							   beforeSend: function(XMLHttpRequest){
							   		if($n.attr("onsubmit")){
							   			var l = $n.attr("onsubmit").split(";");
							   			var f;
											$.each(l,function(li,lv){
												f = eval(lv);	
											})
											if(f)XMLHttpRequest.send( escape("{root:{rows:{row:" + jsonData + "}}}") );	
											return false;
							   		}else{
							   			XMLHttpRequest.send( escape("{root:{rows:{row:" + jsonData + "}}}") );
							   		}
							   		
							   },
							   processData: false,
							   data: "",
							   dataType: 'json',
							   success: function(d){
							   		if(d && d.root && d.root.status==2){
							   			$.ebm.util.sessionTimeOut && $.ebm.util.sessionTimeOut();
							   			return;
							   		} 
							   		if((d && d.root && d.root.rows && d.root.rows.row)){
							   			$.ajax.text = d.root.rows.row;	//保存当前ajax返回的值
							   		}
							   		$n.data("actionData",$.ebm.util.clone(d));
							   		if(d.root.status == 1){
							   			$.ebm.ui.showTip($n.attr("successMsg"));
							   			$.ebm.util.doEvent($n.attr("onsucceed"));
							   		}else{
							   			$.ebm.ui.showTip($n.attr("errorMsg"));	
							   			$.ebm.util.doEvent($n.attr("onerror"));
							   		}
								   	$.ajax.element = $n;
										
							   }
							});
						},1000)
						
					}
					//获取指定对象里的所有 具有id属性的元素的值 组成json返回
					function formElement($n){
						var c = $n.find("[id]")
						var r = {};
						$.each(c, function(ci, cv){
							if( !$(cv).attr("nosubmit") ){
								if( r[ $(cv).attr("id") ] ){
									if( $(cv).attr("class").indexOf("ebm_file")!=-1 ){
										r[ $(cv).attr("id") ] = r[ $(cv).attr("id") ] + "," + $(cv).data("data").fileId;
									}else if( $(cv).attr("class").indexOf("ebm_edit")!=-1 ){
										r[ $(cv).attr("id") ] = r[ $(cv).attr("id") ] + "," + $(cv)[0].xheditor.getSource();
									}else{
										r[ $(cv).attr("id") ] = r[ $(cv).attr("id") ] + "," + $(cv).val();		
									}									
								}else{
									if( $(cv).attr("class").indexOf("ebm_file")!=-1 ){
										r[ $(cv).attr("id") ] = $(cv).data("data") ? $(cv).data("data").fileId : "";
									}else if( $(cv).attr("class").indexOf("ebm_edit")!=-1 ){
										r[ $(cv).attr("id") ] = $(cv)[0].xheditor.getSource();
									}else{
										r[ $(cv).attr("id") ] = $(cv).val();	
									}
								}
							}	
						});
						return r;
					}	
										
				},
				//js编译
				js:function(n){
					reg=/<!--((?!-->)[\s\S]*?)-->/m;
					var js=$(n).text()
					$(n).html("");
					if( reg.test(js))js=RegExp.$1;
				 	try{
					window.execScript(js,"javascript");
					}catch(er){  }	
				}
				
				
				
			}
			
	};
	if($.ebm === undefined){
		$.extend({ebm: dataCompile});
		dataCompile = null;
	}else{
		$.extend($.ebm, dataCompile);	
		dataCompile = null;
	}
	$.fn.extend({
		//提交事件
		ebmSubmit:function(){
			if(this.attr("class").indexOf("ebm_form")!=-1 ){
				$.ebm.dataCompile.form( this );	
			}	
		},
		//刷新事件
		refresh:function(){
			if( this && this.attr("ds") && this.attr("class").indexOf("_")!=-1 ){
				if( this.attr("class").indexOf("ebm_data")!=-1 ){
					$.ebm.dataCompile.data( this );	
				}else if( this.attr("class").indexOf("ebm_list")!=-1 ){
					$.ebm.dataCompile.list( this );	
				}else if( this.attr("class").indexOf("ebm_table")!=-1 ){
					$.ebm.dataCompile.table( this );	
				}else if( this.attr("class").indexOf("ebm_form")!=-1 ){
					$.ebm.dataCompile.data( this );	
				}				
			}	
		}	
	});
	
})(jQuery);
		
