﻿/*
	工具包
	
Depends
	jQuery.js(1.3.2)
*/
window.Ie = /msie/i.test(navigator.userAgent);
(function($){
var util = {
	util:{
		//替换 %%和%{}% 部分
		replace:function(h, d){
			d=d||{};
			var rr = h.replace(/%(?:(\w+)|({[^}]+})|(\(.+?\)))%/g,function(s,k,ex,ss){
				return k!=null?(d[k]?d[k]:''):(
					ex?(rv(ex)):(ss?('%'+ss.replace(/^\(|\)$/g,'')+'%'):'')
				)
			});		
			function rv(s){
				var _v="";
				with(d){try{eval('_v='+s.replace(/^\{|\}$/g,''))}catch(er){}};
				return _v;
			}
			return rr;
		},
		//在str里使用 sptr1 替换 sptr
			replaceAll:function( str, sptr, sptr1 ){
				if(!str)return;
				while (str.indexOf(sptr) >= 0){
				   str = str.replace(sptr, sptr1);
				}
				return str?str:'';
			},
			//对指定部分进行验证 判断是否存在%{}%	存在则进行eval操作 返回替换后的字符串
			replaceByPar:function( ds ){
				var me = this;
				var regex = /(%{)(.*?)(}%)/gi;
				var b = ds.match( regex );
				if(b!=null && b.length > 0){
					for(var j = 0; b != null && b.length > 0 && j < b.length; j++){
						if( b[j].indexOf("?")!=-1 ){
							try{
								ds = me.replaceAll( ds, b[j].substring( 2, b[j].indexOf("?") ), $.ebm.util.bol( b[j].substring( 2, b[j].indexOf("?") ) ) );
								b = ds.match( regex );
							}catch(ex){alert(ex.message)}		
						}
						try{
							ds = me.replaceAll( ds, b[j], eval( $.trim( b[j].substring(2,b[j].length-2) ) ) );
						}catch(ex){
							ds = me.replaceAll( ds, b[j], $.trim( b[j].substring(2,b[j].length-2) ) );
						}		
					}	
				}	
				return ds;	
			},
			//加载html时保持对应元素的原始html，根据c样式名
			saveOldHtml:function(){
				if(arguments.length > 0){
					$.each(arguments, function(a, b){
						$.each($("."+b), function(i, v){
							if( !$(v).data("oldHtml") ){
								$(v).data("oldDom",$(v).clone(true)[0]);	
							}
							/*
							if( !$.ebm.util.temp(v.uniqueID+"html") ){
								$.ebm.util.temp(v.uniqueID+"html", $(v).clone(true).get()[0] );	
							}	
							*/
						});	
					})	
				}
			},
			//清空%%包裹的部分
			clearCompile:function(e){
				var b = $(e).html().match(/[^#\\\}]%(.*?)[^#]%/gi);
				if(b){
					$.each(b,function(bi,bv){
						if(bv.indexOf(".")==-1)
							$(e).html( $.ebm.util.replaceAll( $(e).html(), bv, '' ) )	
					})
				}
			},
		//getData 加载指定数据源数据
			getData:function(sid,fn,refresh,para,async,mode,custom){
				var r = '',b = '',p = '';
				if(!custom){
					if(para) p = "{root:{rows:{row:"+$.ebm.util.objToJson(para)+"}}}";
				}else{
					if(para) p = $.ebm.util.objToJson(para);	
				}
				$.ajax({
				 	 cache: refresh || true,
				 	 type: mode || 'POST',
				 	 async: async || false,
				   url: $.ebm.util.url.unique( ACT.get( sid ) ),
				   beforeSend: function(XMLHttpRequest){
				   		//XMLHttpRequest.setRequestHeader("Content-Type","gbk"); 
				   	if(p)XMLHttpRequest.send( escape( p ) )
				   },
				   dataType: 'json',
				   processData: false,
		   		 data: "",
		   		 complete:function(d){
			   		 	if(d.responseText){
		   		 			r = $.ebm.util.jsonToObj( d.responseText );
		   		 			if(!r)return;
		   		 			switch(r.root.status){
		   		 				case '0':
		   		 					$.ebm.ui.showTip("事务提交出错");
		   		 					break;
		   		 				case '1':
		   		 					if(r.root && r.root.rows && r.root.rows.row){
		   		 						b = r.root.rows.row;
					   		 			if(fn){
					   		 				fn($.ebm.util.toArray(b),r);	
					   		 			}
					   		 		}else{
					   		 			if(fn)fn(null,r);					   		
					   		 		}	 		
		   		 					break;
		   		 				case '2':
		   		 					//$.ebm.ui.showTip("弹出登陆框");
		   		 					$.ebm.util.sessionTimeOut && $.ebm.util.sessionTimeOut();
		   		 					break;	
		   		 			}
			   		 		
	   		 			}
		   		 }
		   	})
		   	if(custom){
		   		return r;	
		   	}
		   	if(b){
		   		return $.ebm.util.toArray(b);
		   	}else{
		   		return $.ebm.util.toArray(r);
		   	}
			},
			//执行指定事件的集合
			doEvent:function(){
				if(arguments.length > 0){
					$.each(arguments,function(ai,av){
						if(av){
							av = $.ebm.util.replaceByPar(av);
							var l = av.split(";");
							$.each(l,function(li,lv){
								eval(lv);	
							})
						}
					})		
				}
			},
			url:{
				unique:function(url){
					if(url){
						try{
							var t=(new Date()).getTime();
							return (url.indexOf("?")!=-1)?url+="&_k_="+t:url+="?_k_="+t;	
						}catch(ex){
							return url;	
						}	
					}
				}	
			},
			//将对象转化为json
			objToJson:function( o ){
				var r = [];
		    if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
		    if(typeof o =="undefined") return "undefined";
		    if(typeof o == "object"){
		        if(o===null) return "null";
		        else if(!o.sort){
		            for(var i in o)
		                r.push('"'+i+'"'+":"+$.ebm.util.objToJson(o[i]))
		            r="{"+r.join()+"}"
		        }else{
		            for(var i =0;i<o.length;i++)
		                r.push(this.objToJson(o[i]))
		            r="["+r.join()+"]"
		        }
		        return r;
		    }
		    return o.toString();
			},
			//将json转化为对象
			jsonToObj:function(str){
				if(!str)return null;
				if(typeof str == 'object')return str;
				try{
			    	var arr=str.split("|||");
			    	if(arr.length==3){
			    		var keys=arr[1].split("|");
			    		var values=arr[2].split("|");
			    		var keyObj={};
			    		for(var i=0;i<keys.length;i++) keyObj[keys[i]]=values[i];
			    		var keys=values=null;
			    		str=arr[0].replace(/\b\w+:/g,function(){
			    			 return  keyObj[arguments[0]]?keyObj[arguments[0]]:arguments[0];
			    		});
			    	}
			    	return Function("return "+str)();
				}catch(e){ return null;}
			},
			//强制转换对象为数组
			toArray:function( o ){
				var r = [];
				if(typeof o == "string"){
					r.push(o);
					return r;	
				}
		    if(typeof o == "undefined" || o==null) return r;
		    if(typeof o == "object"){
		    	if(!(o.length)){
		    		r.push(o);
		    		return r;	
		    	}else{
		    		return o
		    	}
		    }
			},
			//设置全局变量
			setWinTemp:function(key,value){
				var me = this;
				if(!window.public_temp)window.public_temp={};
				var ks=key.split(',');
				if(ks.length >1){
					$.each(ks,function(i,v){me.setWinTemp(v,value)});
					return;
				}
				if(value===null){
					delete public_temp[key];
					return;
				}
				return window.public_temp[key]=value;
			},
			//获得指定key的全局变量
			getWinTemp:function(key){
				if(!window.public_temp)return null;
				return window.public_temp[key];
			},
			//删除指定key的全局变量
			delWinTemp:function(key){
				if(!window.public_temp)return;
				delete window.public_temp[key];
			},
			temp:function(k,v){
				return arguments.length==1 ? this.getWinTemp(k) : this.setWinTemp(k,v);
			},
			//调试
			alertValue:function(){
				var a="";
				for(var i=0;i<arguments.length;i++){
					 if(i==0){
					 	 a+=arguments[i];	
					 }else{
					 	 a+="_"+arguments[i];	
					 }		 
				}
				alert(a);	
			},
			//调试显示时间
			showTime:function(t){
				try{
						return new Date().toString(t || 'hh:nn:ss');
				}catch(ex){}	
			},
			//返回bollean
			bol:function(m){
				//return !!$.trim(m).match(/^(1|true|y|t|yes)$/i);	
				try{
					return eval(m);	
				}catch(ex){
					return false;	
				}
			},
			toKeyObj:function(arr,key){
				var tmp={};
				if(!arr||!arr.length) return {};
				if(!key){$.each(arr,function(i,v){tmp[v]=1});}
				$.each(arr,function(i,v){ if(!!v||v==0)tmp[v[key]]=v});
				return tmp;
			},
			clone:function(fromObj){    
				 var toObj = {};
			   for(var i in fromObj){    
			      if(typeof fromObj[i] == "object"){    
			         toObj[i]={};    
			         toObj[i] = $.ebm.util.clone(fromObj[i]);    
			         continue;    
			      }    
			      toObj[i] = fromObj[i];    
			   }
			   return toObj;    
			},  
			//debugShow
			debugShow:function(){
				var a="";
				for(var i=0;i<arguments.length;i++){
					 a+=arguments[i] + "<br />";	
				}
				$('#debugShow').html( $('#debugShow').html() + a );	
			},
			//释放资源
			destroy:function(v){
				v = null;
				delete v;
				CollectGarbage();		
			}	
			
	}	
}

if($.ebm === undefined){
	$.extend({ebm: util});
	util = null;
}else{
	$.extend($.ebm, util);	
	util = null;
}
})(jQuery);

jQuery(function($){
	/* 格式化日期对象  
	默认格式yyyy-mm-dd 
	注:hh:nn  n表示 分钟
	例:  ( new Date()).toString('现在是yy年mm月dd日hh时nn分ss秒')
 */
	Date.prototype.toString=function(f){
		f=f||'yyyy-mm-dd';
		var cfg={y:'FullYear',d:'Date',m:'Month',h:'Hours',n:'Minutes',s:'Seconds'},me=this;
		return  f.replace(/y+|m+|d+|h+|n+|s+/ig,function(s){
			var t=s.substr(0,1).toLowerCase();
			return  (me['get'+cfg[t]]()+(t=='m'?1:0)+1E4+'').slice(5-s.length);
		})
	}
	//添加火狐outerHTML支持
	if(typeof(HTMLElement)!="undefined" && !window.opera){    
    HTMLElement.prototype.__defineGetter__("outerHTML",function()    
    {    
        var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)    
        if(a[i].specified)    
            str+=" "+a[i].name+'="'+a[i].value+'"';    
        if(!this.canHaveChildren)    
            return str+" />";    
        return str+">"+this.innerHTML+"</"+this.tagName+">";    
    });    
    HTMLElement.prototype.__defineSetter__("outerHTML",function(s)    
    {    
        var r = this.ownerDocument.createRange();    
        r.setStartBefore(this);    
        var df = r.createContextualFragment(s);    
        this.parentNode.replaceChild(df, this);    
        return s;    
    });    
    HTMLElement.prototype.__defineGetter__("canHaveChildren",function()    
    {    
        return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());    
    });    
	}  

	
});

