﻿/*FF兼容函数，修改ＦＦ内置方法*/
!function (bool){
	//兼容FF一些方法
	if (bool){
		//event
		window.constructor.prototype.__defineGetter__("event", function (){//兼容Event对象
			var o=arguments.callee;
			do{
				if (o.arguments[0] instanceof Event)return o.arguments[0];
			}while (o=o.caller);
			return null;
		});
	}
}(/Firefox/.test(window.navigator.userAgent));
//浏览器
var _Browser=function(){
	var na=window.navigator,ua = na.userAgent.toLowerCase();
	var b= {
		platform: na.platform,
		msie: /msie/.test( ua ) && !/opera/.test( ua ),
		opera: /opera/.test( ua ),
		safari: /webkit/.test( ua ) && !/chrome/.test( ua ),
		firefox: /firefox/.test( ua ) ,
		chrome: /chrome/.test( ua )
	};
	var vMark="";
	for(var i in b){
		if(b[i]) vMark=i;
	}
	if(b.safari) vMark="version";
	b.version=(ua.match( new RegExp("(?:"+vMark+")[\\/: ]([\\d.]+)") ) || [])[1];
	b.ie=b.msie;
	b.ie6=b.msie && parseInt(b.version)==6;
	b.ie7=b.msie && parseInt(b.version)==7;
	b.ie8=b.msie && parseInt(b.version)==8;
	try{b.maxthon=b.msie && !!external.max_version;} catch(ex){}
	return b;
}();
var _Event={
	KEY_BACKSPACE: 8//退格键
	,KEY_TAB:9//Tab 键
	,KEY_RETURN:13//回车键
	,KEY_ESC:27//Esc 键
	,KEY_LEFT:37//左箭头键
	,KEY_UP:38//上箭头键
	,KEY_RIGHT:39//右箭头键
	,KEY_DOWN:40//下箭头键
	,KEY_DELETE:46//删除键
	,element: function() {
		/*说明：返回触发事件的元素 */
		/*参数：无*/
		/*调用方式：base.event.element()*/
		/*返回结果：节点元素*/
		return event.target || event.srcElement;
	}
	,isLeftClick: function() {
		/*说明：如果左键被按下则返回 true */
		/*参数：无*/
		/*调用方式：base.event.isLeftClick()*/
		/*返回结果：true | false*/
		return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1)));
	}
	,position:function(){//
		/*说明：获取当前鼠标位置(x,y) */
		/*参数：无*/
		/*调用方式：base.event.position()*/
		/*返回结果：{x:100,y:100}*/
		return {
			'x':event.pageX || (event.clientX + (document.documentElement || document.body).scrollLeft)
			,'y':event.pageY || (event.clientY + (document.documentElement || document.body).scrollTop)
		}
	}
	,findElement: function(tagName) {
		/*说明：从触发事件的元素向上遍历 DOM 树，查找第一个名为目标标签名的元素。 */
		/*参数：tagName: 目标标签名*/
		/*调用方式：base.event.findElement('div')*/
		/*返回结果：标签*/
		var element = this.element();
		while (element.parentNode && (!element.tagName ||
		(element.tagName.toUpperCase() != tagName.toUpperCase())))
		element = element.parentNode;
		return element;
	}
}
//

var _Function={
	addFirstArgument:function(fun,object){
		/*说明：给函数添加第一个参数位置一个参数 */
		/*参数：fun: 函数 object参数*/
		/*调用方式：base.function.addFirstArgument(function(a,b,c){},newArgument)*/
		/*返回结果：function(newArgument,a,b,c){}*/
		var _fun=function(){
			fun.apply(this,base.array(arguments).addFirst(object))
		};
		return _fun;
	}
	,addLastArgument:function(fun,object){
		/*说明：给函数添加最后一个参数位置一个参数 */
		/*参数：fun: 函数 object参数*/
		/*调用方式：base.function.addLastArgument(function(a,b,c){},newArgument)*/
		/*返回结果：function(a,b,c,newArgument){}*/
		var _fun=function(){
			fun.apply(this,base.array(arguments).addLast(object))
		};
		return _fun;
	}
}
var _Cookie={
	get:function(name){
		/*说明：获取cookie */
		/*参数：name：cookie名称*/
		/*调用方式：base.cookie.get('abc')*/
		/*返回结果：cookie值*/
		var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
		if(arr)return unescape(arr[2]);
		return null;
	}
	,set:function(name,value,days){
		/*说明：设置cookie */
		/*参数：name：cookie名称 value：cookie值 days：时间 （默认30天）*/
		/*调用方式：base.cookie.set('abc','1231231',10)*/
		/*返回结果：无*/
		var Days = days || 30; 
		var exp  = new Date(); 
		exp.setTime(exp.getTime() + Days*24*60*60*1000);
		document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
	}
	,del:function(name){
		/*说明：删除cookie */
		/*参数：name：cookie名称*/
		/*调用方式：base.cookie.del('abc')*/
		/*返回结果：无*/
		var exp = new Date();
		exp.setTime(exp.getTime() - 1);
		var cval=this.get(name);
		if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
	}
};
var _Date={
	format:function(pattern){
		/*说明：日期格式化 */
		/*参数：pattern：格式('yyyy-MM-dd h:m:s')*/
		/*调用方式：base.date("2004/11/12").format('yyyy-MM-dd h:m:s')*/
		/*返回结果：2010-11-12 00:00:00*/
		var d=this;
		pattern=pattern||"yyyy-MM-dd";
		var y=d.getFullYear();
		var o = {
			"M" : d.getMonth()+1, //month
			"d" : d.getDate(),    //day
			"h" : d.getHours(),   //hour
			"m" : d.getMinutes(), //minute
			"s" : d.getSeconds() //second
		}
		pattern=pattern.replace(/(y+)/ig,function(a,b){var len=Math.min(4,b.length);return (y+"").substr(4-len);});
		for(var i in o){
			pattern=pattern.replace(new RegExp("("+i+"+)","g"),function(a,b){return (o[i]<10 && b.length>1 )? "0"+o[i] : o[i]});
		}
		return pattern;
	}
	,diff:function(interval,date){
		/*说明：时间差 (参数date减去this的时间差)*/
		/*参数：interval：格式[y 年 M 月 d日 | h时 | m分 | s秒 t毫秒 ] date：计算时间*/
		/*调用方式：base.date("2004/11/12").diff('D','2004/11/13')*/
		/*返回结果：1*/
		if(!date)return;
		var dtStart=this,dtEnd=base.string(date).toDate();
		var objInterval = {
			't':1
			,'s':1000
			,'m':1000 * 60
			,'h':1000 * 60 * 60
			,'d':1000 * 60 * 60 * 24
			,'w':1000 * 60 * 60 * 24 * 7
		};
		try{
			switch (interval){
				case 'M' : return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);  
				case 'y' : return dtEnd.getFullYear() - dtStart.getFullYear();  
				default : return Math.round(( dtEnd - dtStart) / objInterval[interval]);	
			}
		}catch (e){
			return e.message;
		}
	}
	,add:function(interval, number) {   
		/*说明：日期计算(在this时间上累加时间)*/
		/*参数：interval：数据类型( y 年 m月 d日 w星期 q季度  h时 n分 s秒 t毫秒) number累加值*/
		/*调用方式：base.date("2004/11/12").add('d',100)*/
		/*返回结果：Date*/
		var dtTmp = this;  
		var objInterval = {
			't':1
			,'s':1000
			,'m':1000 * 60
			,'h':1000 * 60 * 60
			,'d':1000 * 60 * 60 * 24
			,'w':1000 * 60 * 60 * 24 * 7
		};
		switch (interval) {    
			case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
			case 'M' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
			case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
			default : return new Date(Date.parse(dtTmp) + objInterval[interval]*number);  	
		}  
	} 
	,info:function(interval){
		/*说明： 取得日期数据信息*/
		/*参数：interval：数据类型( y 年 m月 d日 w星期  h时 n分 s秒)*/
		/*调用方式：base.date("2004/11/12").info('w')*/
		/*返回结果：1*/
		var myDate = this;  
		var infoStr='';  
		var Week = ['日','一','二','三','四','五','六'];  
		switch (interval)  {   
			case 'y' :infoStr = myDate.getFullYear();break;  
			case 'M' :infoStr = myDate.getMonth()+1;break;  
			case 'd' :infoStr = myDate.getDate();break;  
			case 'w' :infoStr = Week[myDate.getDay()];break;  
			//case 'ww' :infoStr = myDate.WeekNumOfYear();break;  
			case 'h' :infoStr = myDate.getHours();break;  
			case 'm' :infoStr = myDate.getMinutes();break;  
			case 's' :infoStr = myDate.getSeconds();break;  
		}  
		return infoStr;  
	}
	,days:function(){
		/*说明：取得当前月的天数*/
		/*参数：无*/
		/*调用方式：base.date("2004/11/12").days()*/
		/*返回结果：30*/
		var myDate = this;  
		var y=this.info('y'),m=this.info('M');
		return new Date(y,m,0).getDate();
	}
	,toArray:function(){
		/*说明： 把日期分割成数组  */
		/*参数：无*/
		/*调用方式：base.date("2004/11/12").toArray()*/
		/*返回结果：[2004,11,12,0,0,0]*/
		return [
			this.getFullYear()
			,this.getMonth()
			,this.getDate()
			,this.getHours()
			,this.getMinutes()
			,this.getSeconds()
		];
	}
	,isLeapYear:function(){   
		/*说明： 判断闰年  */
		/*参数：无*/
		/*调用方式：base.date(new Date()).isLeapYear()*/
		/*返回结果：false*/
		return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));   
	} 
	,calendar:function(callBack){
		var year=this.info('y'),month=this.info('M');
		var minDate=(new Date(year,month-1,1)).getDay();
		var maxDate=this.days();
		var thisNum=1,nextNum=1;
		var len=maxDate+minDate;
		len=len+(7-len%7);
		for(var i=0;i<len;i++){
			if(i>=minDate && i<=maxDate+minDate-1){
				var day=false
				if(new Date(year,month-1,thisNum).getDay()==6){
					day=true;
				}
				callBack.thisTime&&callBack.thisTime(thisNum,day);
				thisNum+=1;
			}else if(i>maxDate+minDate-1){
				callBack.nextTime&&callBack.nextTime(nextNum);
				nextNum+=1;
			}else{
				callBack.previousTime&&callBack.previousTime(i,minDate);
				
			}
		}
	}
}
//请求数据
var _XmlHttp={
	ajax:function(url,parameter){
		/*说明：ajax请求数据 */
		/*参数：url：数据文件路径 parameter参数[type(类型post|get)|end(请求结束后调用方法)|error(请求失败后调用方法)|wait(请求时调用方法)|data(请求时附带的参数)]*/
		/*调用方式：base.xmlHttp.ajax('abc.aspx',{type:'post',end:function(xml){alert(xml.responseXML)},data:'a=1&b=2&id=asd123'})*/
		/*返回结果：无*/
		parameter=parameter || {};
		var type=parameter.type || 'get';
		type=type.toLowerCase();
		var xml=(window.ActiveXObject)?(new ActiveXObject("MSXML2.XMLHTTP.3.0")):(new XMLHttpRequest());
		xml.onreadystatechange = function(){
			if(xml.readyState==4){
				if(xml.status == 200){
					parameter.end && parameter.end(xml);
				}else{
					parameter.error && parameter.error(url);
				}
			}else{
				parameter.wait && parameter.wait(url);
			}   
		};
		xml.open(type, url+'?send_time=' + (new Date).getTime()+(type=="get"?('&'+parameter.data):''), true);
		if(type=='post')xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
		xml.send(type=='post'?(parameter.data || null):null);
	}
	,loadJs:{
		lock : false, ranks : []
		, callback : function (startTime, callback) {	
			callback && callback(new Date().valueOf() - startTime.valueOf()); 	
			this.lock = false, this.read(); 
		}
		, read : function () {
			if (!this.lock && this.ranks.length) {
				var head = document.getElementsByTagName("head")[0];
				if (!head) {
					ranks.length = 0, ranks = null;
					throw new Error('HEAD不存在');
				}
				var wc = this, ranks = this.ranks.shift(), startTime = new Date, script = document.createElement('script');
				this.lock = true;
				script.onload = script.onreadystatechange = function () {
					if (script && script.readyState && script.readyState != 'loaded' && script.readyState != 'complete') return;
					script.onload = script.onreadystatechange = script.onerror = null, script.src = ''
						, script.parentNode.removeChild(script), script = null;
					wc.callback(startTime, ranks.callback), startTime = ranks = null;
				};
				script.charset = ranks.charset || 'gb2312';
				script.src = ranks.src;
				head.appendChild(script);
			}
		}
		, add : function (src, charset, callback) {
			this.ranks.push({ 'src' : src, 'charset' : charset, 'callback' : callback});
			this.read();
		}
	}
}
var _Form={
	
}
var _Dom={
	tagList : function(name,callBack){
		/*说明：获取对象下标签集合 */
		/*参数：name：标签名 callBack例外判断方法*/
		/*调用方式：base.$(id).tagList('tr') 或者 base.$(id).tagList('tr',function(obj,key){return key>2})*/
		/*返回结果：标签集合数组*/
		name=name || '*';
		var list=this.getElementsByTagName(name),tList=[];
		for(var i=0;i<list.length;i++){
			if(callBack){
				if(callBack(list[i],i))tList[tList.length]=this.extend(list[i],_Dom);
			}else{
				tList[tList.length]=this.extend(list[i],_Dom);
			}
		}
		tList=this.extend(tList,_Array);
		return tList;
	}
	,nodeList:function(name,callBack){
		/*说明：获取对象下直接后代的标签集合 */
		/*参数：name：标签名 callBack例外判断方法*/
		/*调用方式：base.$(id).nodeList('tr') 或者 base.$(id).nodeList('tr',function(obj,key){return key>2})*/
		/*返回结果：直接后代的标签集合数组*/
		var list=this.childNodes,tList=[];
		name=name.toUpperCase();
		for(var i=0;i<list.length;i++){
			if(callBack){
				if(list[i].tagName==name){
					if(callBack(list[i],i))tList[tList.length]=this.extend(list[i],_Dom);
				}
			}else{
				if(list[i].tagName==name)tList[tList.length]=this.extend(list[i],_Dom);
			}
		}
		tList=this.extend(tList,_Array);
		return tList;
	}
	,cssList:function(cssName,callBack){
		/*说明：获取对象内的ＣＳＳ集合 */
		/*参数：cssName:CSS名称 callBack：例外判断方法*/
		/*调用方式：base.$(id).cssList('abc') 或者 base.$(id).cssList('abc',function(obj,key){return obj.id!='asda2';})*/
		/*返回结果：CSS对象集合数组*/
		return this.tagList('*',function(o,i){
			if(o.className==cssName){
				if(callBack)return callBack(o,i);
				return true;
			}
			return false;
		});
	}
	,click:function(fn,type){
		if(type==false)this.delEvent('onclick',fn);
		else if(fn)this.addEvent('onclick',fn);
		else this.onclick && this.onclick();
	}
	,mousedown:function(fn,type){
		if(type!=false)this.addEvent('onmousedown',fn);
		else this.delEvent('onmousedown',fn);
	}
	,mouseup:function(fn,type){
		if(type!=false)this.addEvent('onmouseup',fn);
		else this.delEvent('onmouseup',fn);
	}
	,mouseover:function(fn,type){
		if(type==false)this.addEvent('onmouseover',fn);
		else this.delEvent('onmouseover',fn);
	}
	,mousemove:function(fn,type){
		if(type!=false)this.addEvent('onmousemove',fn);
		else this.delEvent('onmousemove',fn);
	}
	,toggle:function(){
		if(!arguments.length)return;
		var pro=this,ar=arguments,len=ar.length;
		var key= 0;
		this.click(function(){
			ar[key].apply(pro);
			key+=1;
			if(key>=len)key=0;
		})
	}
	,bind:function(name,fun){
		/*说明：给指定元素添加事件attachEvent方法(new)*/
		/*参数：name：事件名 fun：使用的方法*/
		/*调用方式：base.$(id).addEvent('onclick',function(){alert(1)})*/
		/*返回结果：当前对象*/
		document.all ? this.attachEvent(name,fun) : this.addEventListener(name.substr(2),fun,false);
		return this;
	}
	,unbind:function(name,fun){
		/*说明：移除指定元素的事件的指定方法(new)*/
		/*参数：name：事件名 fun：使用的方法*/
		/*调用方式：base.$(id).delEvent('onclick',function(){alert(1)})*/
		/*返回结果：当前对象*/
		document.all ? this.detachEvent(name,fun) : this.removeEventListener(name.substr(2), fun, false);
		return this;
	}
	,addEvent:function(name,fun){
		/*说明：给指定元素添加事件attachEvent方法*/
		/*参数：name：事件名 fun：使用的方法*/
		/*调用方式：base.$(id).addEvent('onclick',function(){alert(1)})*/
		/*返回结果：当前对象*/
		document.all ? this.attachEvent(name,fun) : this.addEventListener(name.substr(2),fun,false);
		return this;
	}
	,delEvent:function(name,fun){
		/*说明：移除指定元素的事件的指定方法*/
		/*参数：name：事件名 fun：使用的方法*/
		/*调用方式：base.$(id).delEvent('onclick',function(){alert(1)})*/
		/*返回结果：当前对象*/
		document.all ? this.detachEvent(name,fun) : this.removeEventListener(name.substr(2), fun, false);
		return this;
	}
	,buildElement:function(tagName){
		/*说明：在对象内部生成一个节点*/
		/*参数：tagName 标签名 如（div）*/
		/*调用方式：base.$(id).buildElement('div')*/
		/*返回结果：div对象*/
		var obj=typeof tagName == 'string'?document.createElement(tagName):tagName;
		this.appendChild(obj);
		return this.extend(obj,_Dom);
	}
	,writeCloneChild:function(content,Window){
		/*字符串生成对象，并返回此对象的克隆对象*/
		var cObj;
		Window= Window || window;
		if(typeof content=='string'){
			var parentObj=base.buildElement('div',Window.document.body);
			parentObj.innerHTML=content;
			cObj=parentObj.tagList('*')[0];
			parentObj.remove();
		}else{
			cObj=content;
			base.$(content).remove();
		}
		return cObj.cloneNode(true);
	}
	,append:function(content,type){
		/*说明：向对象内部追加内容*/
		/*参数：content[字符串|对象] type(类型clear清除对象内容后追加) insertType(true插入前面|false插入后面)*/
		/*调用方式：base.$(id).append('<div>123123</div>') | base.$(id).append(divObj)*/
		/*返回结果：追加内容*/
		if(type && type=='clear')this.innerHTML='';
		var cloneObj=this.writeCloneChild(content);
		this.buildElement(cloneObj)
		return  cloneObj.append ? cloneObj : this.extend(cloneObj,_Dom);
	}
	,prepend:function(content){
		/*说明：向对象内部前置内容*/
		var cloneObj=this.writeCloneChild(content);
		var o=this.tagList('*')[0];
		o.parentNode.insertBefore(cloneObj,o);
		return  cloneObj.prepend ? cloneObj : this.extend(cloneObj,_Dom);
	}
	,after:function(content){
		/*说明：在对象之后插入内容*/
		var cloneObj=this.writeCloneChild(content);
		if(this.reNextSibing()){
			this.parentNode.insertBefore(cloneObj,this.reNextSibing());
		}else{
			this.parentNode.appendChild(cloneObj);
		}
		return  cloneObj.insertAfter ? cloneObj : this.extend(cloneObj,_Dom);
	}
	,before:function(content){
		/*说明：在对象之前插入内容*/
		var cloneObj=this.writeCloneChild(content);
		this.parentNode.insertBefore(cloneObj,this);
		return  cloneObj.insertBefore ? cloneObj : this.extend(cloneObj,_Dom);
	}
	,empty:function(){
		/*说明：清除对象下所有内容！*/
		this.innerHTML='';
	}
	,remove:function(){
		/*说明：移除对象*/
		this.parentNode && this.parentNode.removeChild(this);
	}
	,attr:function(key,value){
		/*说明：获取或者添加元素的属性*/
		if(typeof key=='object'){
			for(var k in key){
				if(typeof key[k] =='string' || typeof key[k] =='number') this.setAttribute(k,key[k]);
				else this[k]=key[k];
			}
		}else{
			if(value==null){
				var val=this.getAttribute(key);
				if(!val)val=this[key];
				return val
			}else{
				if(typeof key[k] =='string' || typeof key[k] =='number') this.setAttribute(key,value);
				else this[key]=value;
			}
		}
	}
	,removeAttr:function(name){alert(this.getAttribute(name))
		this.attr( name, "" );
		if (this.nodeType == 1)this.removeAttribute(name);	
	}
	,text:function(text){
		if(text==null) return (this.textContent || this.innerText);
		else{
			if(this.textContent)this.textContent=text;
			else this.innerText=text;
		}
	}
	,alpha:function(num){
		/*说明：设置透明度*/
		/*参数：num 透明度值*/
		/*调用方式：base.$(id).alpha(10)*/
		/*返回结果：无*/
		this.style.filter='alpha(opacity='+num+')';
		this.style.opacity=num/100;
	}
	,insertObj:function(obj){
		/*说明：在当前对象之后插入对象(已废除)*/
		/*参数：obj 要插入的对象或者标签名字符串*/
		/*调用方式：base.$(id).insertObj(obj) | base.$(id).insertObj('div') */
		/*返回结果：obj*/
		return this.after(obj);
	}
	,rePreviousSibling:function(){
		/*说明：寻找上一个兄弟节点对象*/
		/*参数：无*/
		/*调用方式：base.$(id).rePreviousSibling()*/
		/*返回结果：上一个兄弟节点对象*/
		var obj=this;
		do {
			obj = obj.previousSibling;
		} while (obj && (obj.nodeType != 1));
		return obj?this.extend(obj,_Dom):null;
	}
	,reNextSibing:function(){
		/*说明：寻找下一个兄弟节点对象*/
		/*参数：无*/
		/*调用方式：base.$(id).reNextSibing()*/
		/*返回结果：下一个兄弟节点对象*/
		var obj=this;
		do {
			obj = obj.nextSibling;
		} while (obj && (obj.nodeType != 1));
		return obj?this.extend(obj,_Dom):null;
	}
	,addClass:function(cssName){
		/*说明：添加class，给标签强制附加一个样式名*/
		/*参数：cssName：样式名*/
		/*调用方式：base.$(id).addClass('abc')*/
		/*返回结果：无*/
		this.className=cssName;
	}
	,cumulativeClass:function(cssName){
		/*说明：累加class,在原有样式基础上附加一个并列样式名，已经存在的样式名不再附加*/
		/*参数：cssName：样式名*/
		/*调用方式：base.$(id).cumulativeClass('abc')*/
		/*返回结果：无*/
		var css=this.className;
		this.className=css.indexOf(' '+cssName)>-1 || css.indexOf(cssName+' ')>-1 || css==cssName?css:css+" "+cssName;
	}
	,removeClass:function(cssName){
		/*说明：移除class,在原有样式基础上移除一个样式名*/
		/*参数：cssName：样式名*/
		/*调用方式：base.$(id).removeClass('abc')*/
		/*返回结果：无*/
		var css=this.className;
		this.className=css.replace(eval('/\\s'+cssName+'|'+cssName+'\s|\s'+cssName+'\s|^'+cssName+'$/g'),"");
	}
	,toggleClass:function(cssName,_switch){
		/*说明：如果存在（不存在）就删除（添加）一个类。如果开关_switch参数为true则加上对应的class，否则就删除。*/
		/*参数：cssName：样式属性名,_switch：true|false*/
		/*调用方式：base.$(id).toggleClass('on') 或者 base.$(id).toggleClass('on',true) */
		/*返回结果：无*/
		var onOff=false;
		if(_switch==null){
			var css=this.className,list=[];
			var vkey=base.array(css.split(' ')).indexOf(cssName);
			if(vkey>-1)onOff=true;
		}else{
			if(_switch)onOff=true;
		}
		if(onOff)this.cumulativeClass(cssName);
		else this.removeClass(cssName);
	}
	,setStyle : function(cssName,cssText){
		/*说明：设置样式,在原有样式基础上移除一个样式名*/
		/*参数：cssName：样式属性名,cssText：值*/
		/*调用方式：base.$(id).setStyle('display','none') 或者 base.$(id).setStyle('cssText','display:none;border:#333 1px solid;')*/
		/*返回结果：无*/
		this.style[cssName]=cssText;
	}
	,getStyle : function(styleName){
		/*说明：获取全局样式表、内嵌样式和 HTML 标签属性中指定的对象的样式*/
		/*参数：styleName：样式属性名*/
		/*调用方式：base.$(id).getStyle('width') */
		/*返回结果：指定样式属性的值*/
		return (this.currentStyle || document.defaultView.getComputedStyle(this,null))[styleName];
	}
	,css:function(name,value){
		if(name!=null && value!=null){
			this.setStyle(name,value);
		}else{
			if(typeof name=='string' && value==null)return this.getStyle(name);
			if(typeof name=='object')this.setStyle('cssText',base.param(name,[':',';']));
		}
	}
	,hover:function(overCallBack,outCallBack){
		/*说明：鼠标移入移出事件 */
		/*参数：overCallBack：鼠标移入的方法 outCallBack：鼠标移出的方法*/
		/*调用方式：base.$(id).hover(function(){alert('移入')},function(){alert('移出')}) */
		/*返回结果：无*/
		this.onmouseover=overCallBack;
		this.onmouseout=outCallBack;
	}
	,hide:function(){
		/*说明：隐藏对象 */
		/*参数：无*/
		/*调用方式：base.$(id).hide() */
		/*返回结果：无*/
		this.setStyle('display','none');
	}
	,show:function(){
		/*说明：显示对象 */
		/*参数：无*/
		/*调用方式：base.$(id).show() */
		/*返回结果：无*/
		this.setStyle('display','block');
	}
	
	,isNearEdge:function(type,spacing,scroll){
		/*说明：判断鼠标是否靠近对象边缘 */
		/*参数：
		type：方向(right,left,bottom,top) 
		spacing：最大间距和最小间距(数值5或者对象{min:5,max:5}) 默认5 可以不传
		scroll：层滚动距离({'left':5,'top':5}) 默认0 可以不传
		*/
		/*调用方式：base.$(id).isNearEdge('left') 或者 base.$(id).tagList('tr',function(obj,key){return key>2})*/
		/*返回结果：true false*/
		var offset=this.offset(true); 
		var xy=base.position();
		spacing= spacing!=null? (typeof spacing =='number'? {min:0,max:spacing}:spacing) : {min:0,max:5};
		scroll=scroll || {'left':0,'top':0};
		var placeData={
			'right':(offset.left+offset.width)-xy.x-scroll.left
			,'left':xy.x-offset.left-scroll.left
			,'bottom':(offset.top+offset.height)-xy.y-scroll.top
			,'top':xy.y-offset.top-scroll.top
		}
		return placeData[type]<=spacing.max && placeData[type]>=spacing.min
	}
	,offset:function(scrOnOff){
		/*说明：获取对象绝对位置以及宽高 */
		/*参数：无*/
		/*调用方式：base.$(id).offset()*/
		/*返回结果：{'left':num,'top':num,'width':num,'height':num}*/
		var obj=this;
		var left = 0, top = 0;
		var width=obj.offsetWidth,height=obj.offsetHeight;
		do { left += obj.offsetLeft-(scrOnOff?obj.scrollLeft:0), top += obj.offsetTop-(scrOnOff?obj.scrollTop:0); } while (obj = obj.offsetParent);
		return { 'left' : left, 'top' : top ,'width':width,'height':height};
	}
	,_scroll:function(key,value){
		if(key==null && value==null){
			return {'left':this.scrollLeft,'top':this.scrollTop,'width':this.scrollWidth,'height':this.scrollHeight};
		}else{
			var type={'left':'scrollLeft','top':'scrollTop','width':'scrollWidth','height':'scrollHeight'};
			if(value==null){
				if(typeof key=='string') return this[type[key]];
				else{
					for(var i in key){
						this[type[i]]=typeof key[i] == 'function' ? key[i](this.scrollWidth,this.scrollHeight) :key[i];
					}
				}
			}else{
				this[type[key]]=typeof value == 'function' ? value(this.scrollWidth,this.scrollHeight) :value;
			}
		}
	}
	,addMethod : function(name,callBack){
		/*说明：给本框架附加新功能*/
		/*参数：name：功能名 callBack方法*/
		/*调用方式：_Dom.addMethod('load',function(){this.onload=function(){alert(1)}})*/
		/*返回结果：无*/
		this[name]=callBack;
	}
	,addMethods : function(object){
		/*说明：给本框架附加新功能集合*/
		/*参数：object 其他框架如 a={b:function(){},c:function(){}}*/
		/*调用方式：_Dom.addMethods(a)*/
		/*返回结果：无*/
		var e=this;
		e=this.extend(e,object);
	}
	,extend : function(formerObj,newObj){
		/*说明：给对象扩展属性 */
		/*参数：formerObj:原框架 newObj：新框架*/
		/*调用方式：无*/
		/*返回结果：无*/
		for(var i in newObj){
			formerObj[i]=newObj[i];
		}
		return formerObj;
	}
}
var _String={
	byteLen:function(){
		/*说明：获取字符串字节长度 */
		/*参数：无*/
		/*调用方式：base.string('asdasdad').byteLen()*/
		/*返回结果：length 字符串长度*/
        return this.replace(/[^\x00-\xff]/g,"--").length;
    }
	,contains:function(subStr){
		/*说明：判断参数是否存在字符串之内 */
		/*参数：subStr 关键字*/
		/*调用方式：base.string('asdasdad').contains('a')*/
		/*返回结果：true false*/
		return this.indexOf(subStr)>-1;
	}
	,getUrlParameter:function(){
		/*说明：获取路径参数 */
		/*参数：subStr 关键字*/
		/*调用方式：base.string('http://www.asdas.com/index.aspx?a=1&b=2').getUrlParameter()*/
		/*返回结果：{a:1,b:2}*/
		var parameter=this.split('?')[1];
		if(!parameter){return null;}
		var parameterHash={},parameter='&'+parameter;
		parameter.replace(/&([^=]+)=([^&]*)/g,function(){
			parameterHash[arguments[1]]=arguments[2]
		})
		return parameterHash;
	}
	,toDate:function(){   
		/*说明：把字符串返回成Date格式 */
		/*参数：无*/
		/*调用方式：base.string('2100.11.12 12:34:56').toDate()*/
		/*返回结果：Date*/
		var converted = Date.parse(this);  
		var myDate = new Date(converted);  
		if (isNaN(myDate))  
		{
			var arys= this.split(/[^\d]/);  
			myDate = new Date(arys[0],--arys[1],arys[2],arys[3]||null,arys[4]||null,arys[5]||null,arys[6]||null);  
		}  
		return myDate;  
	} 
	,Replace:function(keyList,dataList){
		/*说明：根据关键字批量替换内容 */
		/*参数：keyList：关键字集合 dataList：数据集合*/
		/*调用方式：base.string('a{@b@}c{@d@}').Replace(['{@b@}','{@d@}'],['b','d'])*/
		/*返回结果：abcd*/
		var obj=this;
		for(var i=0;i<keyList.length;i++){
			obj=obj.replace(eval('/'+keyList[i]+'/g'),dataList[i]);
		}
		return obj;
	}
	,_trim:function(text,type,str){
		/*说明：去除空格 */
		/*参数：text字符串 type类型(left去除左侧|right去除右侧|all去除所有|null去除左右)或者函数(function(text){return text.replace(/\d/g,'');})*/
		/*调用方式：base.string(' abcd ')._trim() | _String._trim(' abcd ','left')*/
		/*返回结果：abcd*/
		str=str || '\\s';
		if(type==null)return text.replace(eval('/(^'+str+'*)|('+str+'*$)/g'), '');
		if(typeof type == 'string'){
			switch (type) {
			case 'left' :
				return text.replace(eval('/(^'+str+'*)/g'), '');
			case 'right' :
				return text.replace(eval('/('+str+'*$)/g'), '');
			case 'all' :
				return text.replace(eval('/'+str+'/g'),'');
			}
		}else if(typeof type == 'function'){
			return type(text);
		}
	}
	,trim:function(){
		/*说明：去除左右空格 */
		/*参数：无*/
		/*调用方式：base.string(' abcd ').trim()*/
		/*返回结果：abcd*/
		return this.replace(/(^\s*)|(\s*$)/g, '');
	}
	,lTrim:function(){
		/*说明：去除左空格 */
		/*参数：无*/
		/*调用方式：base.string(' abcd ').lTrim()*/
		/*返回结果：abcd */
		return this.replace(/(^\s*)/g, '');
	}
	,rTrim:function(){ 
		/*说明：去除右空格 */
		/*参数：无*/
		/*调用方式：base.string(' abcd ').rTrim()*/
		/*返回结果： abcd*/
		return this.replace(/(\s*$)/g, '');
	}
	,aTrim:function(){
		/*说明：去除所有空格 */
		/*参数：无*/
		/*调用方式：base.string(' a b c d ').rTrim()*/
		/*返回结果：abcd*/
		return this.replace(/\s/g,'');
	}
	,isRegExp : function(regExp){
		/*说明：正则判断 */
		/*参数：regExp 正则表达式('\\d+')*/
		/*调用方式：base.string('abcsd12313').isRegExp('\\d+')*/
		/*返回结果：false*/
		return (new RegExp(regExp)).test(this)
	}
	,isEmail : function(){
		/*说明：email地址 */
		/*参数：无*/
		/*调用方式：base.string('asdasd@163.com').isEmail()*/
		/*返回结果：true*/
		return this.isRegExp("^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$");
	}
	,isDate:function(){  
		var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);  
		if(r==null)return false;  
		var d = new Date(r[1], r[3]-1, r[4]);  
		return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);  
	} 
	,isNumeric : function(){
		/*说明：数值 */
		/*参数：无*/
		/*调用方式：base.string('12313asdasd').isNumeric()*/
		/*返回结果：false*/
		return this.isRegExp("^\\d+$");
	}
	,isPostalCode : function(){/*说明：邮政编码 无说明 */return this.isRegExp("^[a-zA-Z0-9 ]{3,12}$");} 
	,isUrl : function(){/*说明：url  无说明 */return this.isRegExp("^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$");}
	,extend : function(formerObj,newObj){
		/*说明：给对象扩展属性 */
		/*参数：formerObj:原框架 newObj：新框架*/
		/*调用方式：无*/
		/*返回结果：无*/
		for(var i in newObj){
			formerObj[i]=newObj[i];
		}
		return formerObj;
	}
};

var _Array={
	each:function(callBack){
		/*说明：循环遍历数组 */
		/*参数：callBack：遍历数组时调用的方法*/
		/*调用方式：base.array([1,2,3,4,5]).each(function(value,key){alert(value)})*/
		/*返回结果：无*/
		for(var i=0;i<this.length;i++){
			if(callBack(this[i],i)==false)break;
		}
	}
	,_each:function(callBack){
		/*说明：循环遍历数组 */
		/*参数：callBack：遍历数组时调用的方法*/
		/*调用方式：base.array([1,2,3,4,5])._each(function(key){alert(this)})*/
		/*返回结果：无*/
		for(var i=0;i<this.length;i++){
			var obj=this[i];
			if((function(key){callBack.apply(obj,arguments);})(i)==false)break;
		}
	}
	,map:function(callBack){
		/*说明：将一个数组中的元素转换到另一个数组中。 */
		/*参数：callBack：遍历数组时调用的方法*/
		/*调用方式：base.array([1,2,3]).map(function(value,key){return value+4;})*/
		/*返回结果：[5,6,7]*/
		var list=[];
		for(var i=0,len=this.length;i<len;i++){
			var value=callBack(this[i],i);
			if(value!=false)list[list.length]=value;
		}
		return list;
	}
	,merge:function(){
		/*说明：合并两到多个数组。 */
		/*参数：任意个数组*/
		/*调用方式：base.array([1,2,3]).merge(1,[3,2,1],[4,5,6,7,8])*/
		/*返回结果：[1,2,3,1,3,2,1,4,5,6,7,8]*/
		return this.extend(this.concat.apply(this,arguments));
	}
	,clear: function(){
		/*说明：清空数组 */
		/*参数：无*/
		/*调用方式：base.array([1,2,3,4,5]).clear()*/
		/*返回结果：无*/
		this.length = 0;
	}
	,first : function(){
		/*说明：返回array的第一个对象 */
		/*参数：无*/
		/*调用方式：base.array([1,2,3,4,5]).first()*/
		/*返回结果：1*/
		return this[0];
	}
	,addFirst:function(object){
		/*说明：添加一个元素到数组第一项 */
		/*参数：object元素*/
		/*调用方式：base.array([1,2,3,4,5]).addFirst(0)*/
		/*返回结果：数组[0,1,2,3,4,5]*/
		var list=[object];
		this.each(function(obj){
			list[list.length]=obj;
		});
		return this.extend(list,_Array);
	}
	,last : function(){
		/*说明：返回最后一个元素 */
		/*参数：无*/
		/*调用方式：base.array([1,2,3,4,5]).last()*/
		/*返回结果：5*/
		return this[this.length-1];
	}
	,addLast:function(object){
		/*说明：添加一个元素到数组最后项 */
		/*参数：object元素*/
		/*调用方式：base.array([1,2,3,4,5]).addLast(6)*/
		/*返回结果：数组[1,2,3,4,5,6]*/
		this[this.length]=object;
		return this;
	}
	,indexOf : function(object) {
		/*说明：寻找数组内容跟参数相同的对象，返回索引 */
		/*参数：object 关键字符串或对象*/
		/*调用方式：base.array(['a','b','v','d','w']).indexOf('v') */
		/*返回结果：w*/
		for (var i = 0; i < this.length; i++){
			if(typeof object=='function'){
				if (object(this[i],i)==true)return i;
			}else{
				if (this[i] == object) return i;
			}
				
		}
		return -1;
	}
	,unique:function(){
		/*说明：数组元素除重，得到新数据 */
		/*参数：无*/
		/*调用方式：base.array(['a','a','v','d','a']).unique() */
		/*返回结果：['a','v','d']*/
		var list = [];
		for(var i = 0; i < this.length; i ++){
			if(base.array(list).indexOf(list,arr[i])<0){
				list[list.length]=arr[i];
			}
		}
		return this.extend(list,_Array);
	}
	,interval:function(begin,end,showKey){
		/*说明：获取数组内某个范围的内容 */
		/*参数：begin：开始索引或值,end：结束索引或值,showKey：类型（返回数据是否显示索引true false）*/
		/*调用方式：base.array(['a','b','v','d','w','s']).interval(2,4) 或者 base.array(['a','b','v','d','w','s']).interval('v','w')*/
		/*返回结果：['v','d','w'] 或者 显示索引 [{'value':'v','key':2},{'value':'d','key':3},{'value':'w','key':4}]*/
		var beginKey=typeof begin == 'string' ? this.indexOf(begin) : begin;
		var endKey=typeof end == 'string' ? this.indexOf(end) : end;
		if(beginKey==-1 || endKey==-1)return -1;
		var i=Math.min(beginKey,endKey),length=Math.max(beginKey,endKey)
		var list=[];
		for(;i<=length;i++){
			if(!showKey){
				list[list.length]=this[i];
			}else{
				list[list.length]={'value':this[i],'key':i};
			}
		}
		return this.extend(list,_Array);
	}
	,remove:function(){
		for(var i=0;i<this.length;i++){
			this[i].parentNode.removeChild(this[i]);
		}
	}
	,without : function(){//返回一个把参数列表中包含的元素从源Array中排除的Array。 
		var list=[];
		for(var i=0;i<this.length;i++){
			var onOff=false;
			for(var j=1;j<arguments.length;j++){
				if(this[i]==arguments[j]){
					onOff=true;
					break;
				}
			}
			if(!onOff)list[list.length]=array[i];
		}
		list=this.extend(list,_Array);
		return list;
	}
	,max:function(){//返回最大值
		var result;
		this.each(function(value) {
		  if (value >= (result || value))result = value;
		});
		return result;
	}
	,min:function(){//返回最小值
		var result;
		this.each(function(value) {
		  if (value <= (result || value))result = value;
		});
		return result;
	}
	,bubbleSort:function(callBack){
		/*说明：冒泡排序 */
		/*参数：callBack计算函数 默认x>y*/
		/*调用方式：base.array([2,5,3,1,8]).bubbleSort() */
		/*返回结果：w*/
		callBack=callBack || function(x,y){return x>y};
		var len=this.length;
		for(var j=len-1;j>0;j--){
			for(var i=0;i<j;i++){
				if(callBack(this[i],this[i+1])){
					var temp=this[i];
					this[i]=this[i+1];
					this[i+1]=temp;
				}
			}
		}
		return this;
	}
	,toHash : function(){
		if(!arguments.length)return this;
		var hash={},hashList=[],proList=this,thisArguments=arguments;
		this.each(function(value,i){
			if(thisArguments.length==1){
				var h={};
				h[thisArguments[0]]=value;
				hashList[hashList.length]=h;
			}else if(thisArguments.length==proList.length){
				hash[thisArguments[i]]=value;
			}
		});
		if(thisArguments.length==1)return hashList;
		if(thisArguments.length==proList.length)return hash;
		return this;
	}
	,ToString:function(key,spliceText,length){
		var strList=[];
		key=key || 0;
		spliceText=spliceText || '';
		length =length || this.length;
		for(var i=key;i<length;i++){
			strList[strList.length]=this[i];
		}
		return strList.join(spliceText);
	}
	,extend:function(formerObj,newObj){//给对象扩展属性
		for(var i in newObj){
			formerObj[i]=newObj[i];
		}
		return formerObj;
	}
}

var base={
	//处理DOM
	$:function(){
		/*说明：获取Dom节点对象 或者 对象集合 */
		/*参数：字符串id 或者对象 1到N个*/
		/*调用方式：base.$('abc') 或者 base.$(document) 或者 base.$(document,document.body,window) */
		/*返回结果：Dom节点对象或者 对象集合*/
		var objList=[];
		for(var i=0;i<arguments.length;i++){
			var obj=typeof arguments[i] == 'string' ? document.getElementById(arguments[i]) : arguments[i];
			if(obj)obj=this.extend(obj,_Dom);
			if(arguments.length==1)return obj;
			objList[objList.length]= obj;
		}
		objList=this.extend(objList,_Array);
		return objList;
	}
	,$S:function(text,funCallBack){
		/*说明：类似jquery的选择器 */
		/*参数：text：字符串 funCallBack： */
		/*调用方式：base.$S('.abc ul.aa li') 或者 base.$S('.abc ul.aa li:(ab)',function(obj,text){return obj.className==text;}) */
		/*返回结果：li集合*/
		var dataList=new splitCssSelectString(text);
		var list=this.getRank(dataList,0,null,funCallBack);
		return list?(list.length?this.array(list):this.$(list)):null;
	}
	,ready:function(fun){
		this.$(window).addEvent('onload',fun);
	}
	,$F:function(){
		/*说明：获取文本框value 或者value集合 */
		/*参数：字符串id 或者对象 1到N个*/
		/*调用方式：base.$F('abc') 或者 base.$('abc','bcd','def') */
		/*返回结果：value 或者 values*/
		var objList=arguments.length>1?this.$.apply(this,arguments):[this.$(arguments[0])];
		var valueList=[];
		for(var i=0;i<objList.length;i++){
			var value=this.extend(new String(objList[i].value),_String);
			if(arguments.length==1)return value;
			valueList[valueList.length]=value;
		}
		valueList=this.extend(valueList,_Array);
		return valueList;
	}
	,getIframe:function(id,parentWindow){
		/*说明：获取页面内iframe的window */
		/*参数：id：页面内iframe的ID parentWindow：使用环境(window|parent|top) */
		/*调用方式：base.getIframe('abc') 或者 base.getIframe('abc',parent) */
		/*返回结果：iframe*/
		parentWindow=parentWindow || window;
		var list=base.$(parentWindow.document).tagList('iframe'),len=list.length,i=0;
		for(;i<len;i++){
			if(list[i].id==id){
				return parentWindow.frames[i];
			}
		}
		return null;
	}
	,getRank:function(list,key,parent,funCallBack){
		if(key>=list.length)return parent;
		var name=list[key].name,value=list[key].value;
		var parentObj, pro=this;
		var data={
			id:function(par,str){return pro.$(str);}
			,className:function(par,str){
				try {
					return par.cssList(str);
				}catch(e){return null;}
			}
			,tagName:function(par,str,call){
				try {
					return par.tagList(str,function(o){call&&call(o);return true;});
				}catch(e){return null;}
			}
			,tagCss:function(par,str,call){
				if(par.className==str)call&&call(par);
			}
			,funName:function(par,str,call){
				if(funCallBack && funCallBack(par,str)){
					call&&call(par);
				}
			}
		};
		if(parent){
			if(parent.length){
				parentObj=[];
				for(var i=0;i<parent.length;i++){
					data[name](parent[i],value,function(o){parentObj[parentObj.length]=o;});
				}
			}else{
				parentObj=data[name](parent,value);
			}
		}else{
			parentObj=data[name](this.$(document),value);
		}
		key+=1;
		return this.getRank(list,key,parentObj,funCallBack);
	}
	,isInvolveTo:function(obj,parentObj){
		/*说明：判断对象是否包含在指定对象内*/
		do{
			if(obj==parentObj)return true;
		}while(obj = obj.parentNode);
		return false;
	}
	,buildElement:function(tagName,parentNode){
		/*说明：在对象内部生成一个节点*/
		/*参数：tagName 标签名 如（div）parentNode：父节点(字符串id或者对象)*/
		/*调用方式：base.buildElement('div',document.body)*/
		/*返回结果：div对象*/
		var obj=typeof tagName == 'string'?document.createElement(tagName):tagName;
		var parentObj=typeof parentNode == 'string'?base.$(parentNode):parentNode;
		parentObj.appendChild(obj);
		return this.extend(obj,_Dom);
	}
	,json:function(object){
		/*说明：转换对象为JSON格式字符串*/
		/*参数：object 对象 如 {a:'a',b:function(){alert(1)},c:{cc:function(){alert(2)}}}*/
		/*调用方式：base.json({a:'a',b:function(){alert(1)},c:{cc:function(){alert(2)}}})*/
		/*返回结果："{'a':'a','b':function(){alert(1)},'c':{'cc':function(){alert(2)}}}"*/
		return (new jsonSwitch(object)).toString();
	}
	,extend:function(formerObj,newObj){//给对象扩展属性
		for(var i in newObj){
			formerObj[i]=newObj[i];
		}
		return formerObj;
	}
	,capture:function(obj,num){
		if(document.all){
			num?obj.setCapture():obj.releaseCapture();
		}	
	}
	,cleanOutSelect:function(){
		try {
			document.selection.empty();
		} catch (exp) {
		try {
			window.getSelection().removeAllRanges();
		} catch (exp) {}
		}
	}
	,isLeftClick: function() {
		return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1)));
	}
	,clearRightMenu: function(){
		this.$(document.body).addEvent('oncontextmenu',function(){
			if (document.all) window.event.returnValue = false;
			else event.preventDefault();
		});
	}
	,repeater : function(data){
		/*说明：模拟c#的repeater控件*/
		/*参数：data：{Data:[{key:value},{key:value} | value,value],HeadrTemplate:'头部',ItemTemplate:'内容[字符串|函数(返回字符串),FooterTemplate:'尾部']'} */
		/*调用方式：base.json({a:'a',b:function(){alert(1)},c:{cc:function(){alert(2)}}})*/
		/*返回结果："{'a':'a','b':function(){alert(1)},'c':{'cc':function(){alert(2)}}}"*/
		var strList=[],len=data.Data.length;
		for(var i=0;i<len;i++){
			var text=(typeof data.ItemTemplate=='function' ? data.ItemTemplate(data.Data[i],i) : data.ItemTemplate);
			var d=data.Data[i];
			text.replace(/{@([^@]+)@}/g,function(){
				text=text.replace(arguments[0],(d[arguments[1]] || ''));
			});
			strList[strList.length]=text;
		}
		
		return (data.HeadrTemplate || "")+strList.join('')+(data.FooterTemplate || "");
	}
	,dElement:function(){//兼容DTD头
		return	document.documentElement || document.body;
	}
	,position:function(){//获取当前鼠标位置(x,y)
		return {
		'x':event.pageX || (event.clientX + this.dElement().scrollLeft)
		,'y':event.pageY || (event.clientY + this.dElement().scrollTop)
		}
	}
	//表单处理
	,form:function(){
		
	}
	,param:function(params,connector){
		/*说明：将表单元素数组或者对象序列化 */
		/*参数：params：json格式的对象{a:1,b:2,c:3} connector：连接符['='第一位 '&'第二位]*/
		/*调用方式：base.param({a:1,b:2,c:3}) | base.param({a:1,b:2,c:3},['+','*'])*/
		/*返回结果：a=1&b=2&c=3 | a+1*b+2*c+3 */
		connector=connector || ['=','&']
		var list=[];
		for(var key in params){
			list[list.length]=key+connector[0]+params[key];
		}
		return list.join(connector[1]);
	}
	,browser:_Browser
	,event:_Event
	,date:function(date){
		/*说明：返回指定格式时间 */
		/*参数：date：时间字符串(["2004/12/12" | "2004/12/12 12:22:24"]年月日以/隔开 时分秒以:隔开 至少有年月日)或者 new Date()当前时间*/
		/*调用方式：base.date("2004/12/12") | base.date(new Date())*/
		/*返回结果：时间对象*/
		date=base.string(date).toDate();
		if(date){
			return this.extend(date,_Date);
		}
		return date;
	}
	//扩展字符串处理 
	,string : function(string){
		return this.extend(new String(string),_String);
	}
	//扩展数组处理 
	,array : function(list){
		if(list.length){
			var _last=[];
			for(var i=0;i<list.length;i++){
				_last[_last.length]=list[i];
			}
			return this.extend(_last,_Array);
		}else{
			return null;
		}
	}
	,dom:function(obj){
		return this.extend(obj,_Dom)
	}
	,toArray : function(length,callBack){
		var list=[];
		for(var i=0;i<length;i++){
			list[list.length]=callBack(i);
		}
		return this.extend(list,_Array);
	}
	//处理cookie
	,cookie:function(){
		return _Cookie;
	}()
	,xmlHttp:function(){
		return _XmlHttp;
	}()
	//队列
	,rank : {
		lock : false , ranks : []
		,add:function(callBack){
			this.ranks[this.ranks.length]=function(c){callBack();c();};
		}
		,exec:function(){
			if(!this.lock && this.ranks.length){
				this.lock=true;
				var pro=this;
				var ranks=this.ranks.shift();
				ranks(function(){pro.lock=false;pro.exec();})
			}
		}
	}
	
	//异常处理机制
	,Try:{
		//得到正常工作的方法的返回值
		these:function(){
			var value;
			for(var i=0;i<arguments.length;i++){
				try {
					value=arguments[i]();
					break;
				}catch(e){}
			}
			return value
		}
	}
};
//格式转换 将对象转换成字符串
//new jsonSwitch(obj);
var jsonSwitch=function(obj){
	this.obj=obj;
};
jsonSwitch.prototype={
	type:{'Object':'{@Con@}','Array':'[@Con@]','String':'\'@Con@\'','Function':'@Con@'}
	,toString:function(){
		return this.judge(this.obj);
	}
	,judge:function(obj){	
		switch (obj.constructor) {
			case Object :
				return this.object(obj,'Object');
			case Array :
				return this.array(obj,'Array');
			case String :
				return this.string(obj,'String');
			case Function :
				return this.fun(obj,'Function');
		}
	}
	,object:function(obj,type){
		var str=[];
		for(var i in obj){
			var oo=obj[i];
			var text='';
			text+=this.string(i,'String')+':';
			text+=this.judge(oo);
			str[str.length]=text;
		}
		return this.replace(type,str);
	}
	,array:function(obj,type){
		var str=[];
		for(var i=0;i<obj.length;i++){
			var oo=obj[i];
			str[str.length]=this.judge(oo);
		}
		return this.replace(type,str);
	}
	,string:function(obj,type){
		return this.replace(type,obj);
	}
	,fun:function(obj,type){
		return this.replace(type,obj.toString().replace(/[\n\r\t]/g,''));
	}
	,replace:function(type,text){
		return this.type[type].replace('@Con@',text);
	}	
};
//CSS选择器词法解析
var splitCssSelectString=function(text){
	this.text=text;
	return this.analysis();
}
splitCssSelectString.prototype={
	analysis:function(){
		var pro=this,list=this.text.split(' '),dataList=[];
		for(var i=0;i<list.length;i++){
			this.analysisType(list[i],function(text,i){
				dataList[dataList.length]={name:i,value:text};
			});
		}
		return dataList;
	}
	,analysisType:function(text,callBack){
		var test={
			id:/^\#[^\#\[\]]+$/
			,className:/^\.[^\.\:\[\]]+$/
			,tagName:/^[^\#\.\:\[\]]+$/
		};
		var onOff=false;
		for(var i in test){
			if(test[i].test(text)){
				onOff=true;
				callBack(text.replace(/[\.\#]/,''),i);
			}
		}
		if(!onOff)this.analysisTag(text,callBack);
	}
	,analysisTag:function(text,callBack){
		var match={
			tagName:/^([^\.\:\[\]]+)/
			,tagCss:/[^\(]\.([^\.\:\[\]]+)/
			,funName:/\:\((.+)\)/
			//,funAtt:/\(([^\)]+)\)/
			,exp:/\[([^\]]+)\]/
		};
		for(var i in match){
			var tt=text.match(match[i]);
			if(tt)callBack(tt[1],i);
		}
	}
};
//缓动类
var tween=function(newObj){
	this.speed=10;
	this.time=0;
	this.duration=50;
	this.type='easeIn';
	var pro=this;
	pro=this.rewriteAtt(pro,newObj);
	this.show();
}
tween.prototype={
	min:0,loop:null
	,easeOut:function(t,b,c,d){
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	}
	,easeIn:function(t,b,c,d){	
		return c*(t/=d)*t*t*t*t + b;
	}
	,easeInOut: function(t,b,c,d){
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	}
	,rewriteAtt:function(formerObj,newObj){
		for(var i in newObj){
			formerObj[i]=newObj[i];
		}
		return formerObj;
	}
	,show:function(){
		var pro=this;
		var num=this[this.type](this.time,this.min,this.max,this.duration);
		this.time+=1;
		this.callBack&&this.callBack(num);
		if(this.time==this.duration){
			clearTimeout(this.loop);
			this.lastCallBack&&this.lastCallBack();
			return;
		}
		this.loop=setTimeout(function(){pro.show()},this.speed);
	}
};

