var jBase={
  browser:{       //定义浏览器版本及类型
		userAgent:navigator.userAgent,
		version: (navigator.userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/i)||[])[1],
			msie: /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent),
			firefox: /firefox/i.test(navigator.userAgent),
			opera: /opera/i.test(navigator.userAgent),
			safari: /webkit/i.test(navigator.userAgent),
			chrome:/chrome/i.test(navigator.userAgent)
	},
	//该方法根据第一次查找到的字符串将原始字符串分为两部分，返回数组
	findFirst:function(str,findstr){ 
      var ds=[];
      if(str.indexOf(findstr)>0){
          ds.push(str.substring(0,str.indexOf(findstr)));
          ds.push(str.substr(str.indexOf(findstr)+1,str.length-str.indexOf(findstr)-1));
      }else{
          ds.push(str);
      }
      return ds;
  },
  escape:function(url){  //用escape()方法对url编码，返回编码后的url
		return url.replace(/(?:=)(.*?)((?:\&)|$)/g,function(s,s1){return "="+escape(s1)+"&";}).replace(/&$/,"");
	},
	childNodes:function(node){ //获取子节点
		var ret = [];
		if(node&&node.nodeType==1&&node.childNodes){
			var os=node.childNodes;
			for (var i=0;i<os.length;i++){
				if (os[i].nodeType==1){
					ret.push(os[i]);
				}
			}
		}
		return ret.length>0 ? ret : false;
	}
}
 //判断对象类型
 jBase.checkType=function(obj,type){
	 try{
		return typeof(obj) == type||obj.constructor == type||obj instanceof type;
	}catch(e){return false;}
 }
 //将对象转换为数组
 jBase.toArray=function(obj){
	if(jBase.checkType(obj,Array))return obj;
	var ret=[];
	if(jBase.checkType(obj,Function)||jBase.checkType(obj,Date)||jBase.checkType(obj,Boolean)||jBase.checkType(obj,Number)||jBase.checkType(obj,String)){
		ret.push(obj);
	}
	else{
		if(!obj.length){ret.push(obj);}
		else{
			for(var i=0;i<obj.length;i++){
				ret.push(obj[i]);
			}
		}
	}
	return ret;
 }
//tab切换
jBase.tabChange=function(tabs,os,css1,css2,evt,fn){
	tabs=jBase.checkType(tabs,Array)?tabs:jBase.childNodes(get(tabs));  //tab
	if(os)os=jBase.checkType(os,Array)?os:jBase.childNodes(get(os));    //对应的内容
	var f=fn?fn:((evt&&typeof(evt)=="function")?evt:false);
	evt="on" + ((typeof(evt)=="string"?evt:false)||"click");
	jBase.toArray(tabs).each(function(o,i){
		get(o)[evt]=function(){
			tabs.each(function(oo,j){get(oo).className=css2;});
			this.className=css1;
			if(os){
				os.each(function(oo,j){get(oo).style.display="none";});
				get(os[i]).style.display="block";
			}
			if(f)f(o,i);
		}
	});
}
  //迭代器:对数组的每一项执行函数fn
 Array.prototype.each=function(fn){ 
	for(var i=0;i<this.length;i++){
		fn(this[i],i);
	}
 }
 //根据id获取对象
function get(obj){
	return typeof(obj)=="string"?document.getElementById(obj):obj;
}
(function(){
	Ajax={
		create:create,
		send:send,
		Request:Request,
		Updater:Updater
	};
	//创建跨浏览器的XMLHttpRequest对象
	function create(){
		if(jBase.browser.msie){
            var ies=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
            for(var i=0;i<ies.length;i++){
                try{
                    return new ActiveXObject(ies[i]);
                }catch(e){}
            }
        }
        else{
            return new XMLHttpRequest();
        }
	}
	//初始化Ajax参数
	function init(){
		var json={method:"get"};
		if(arguments&&arguments.length>0){json=arguments[0];}
		var options={
			method:json.method?json.method.toUpperCase():"GET",
			asyn:json.asyn||"true",
			charset:json.charset||"gb2312",
			contentType:json.contentType||"application/x-www-form-urlencoded",
			mime:json.mime||"text/html"
		};
		return options;
	}
	function Recenspace(html){
		try{
			var rs;
			rs=new ActiveXObject("ADODB.RecordSet");
			rs.fields.append("a",201,1);
			rs.open();      
			rs.addNew();
			rs(0).appendChunk(html);
			rs.update();
			return rs(0).value;
			rs.close();
		}catch(e){return html;}
	}
	//send的处理事件
	function doProcess(obj,xmlhttp,fn,mime){
		if(xmlhttp.readyState==4){
			var str;
			if(jBase.browser.msie){
				str=Recenspace(xmlhttp.responseBody)||xmlhttp.responseText;
			}else{str=xmlhttp.responseText;}
			if(obj){get(obj).innerHTML=str;}
				if(fn){fn(str);}
	    }
	}
	//发送一个Ajax请求
	function send(obj,url,json,fn){
		obj=obj||false;
		this.url=url;
		this.options=init(json);
		var mime=this.options.mime;
		var xmlhttp=new Ajax.create();
		var isGet=this.options.method!="POST"?true:false;
		var urls=jBase.findFirst(this.url,"?");
		xmlhttp.open(isGet?"GET":"POST",isGet?jBase.escape(this.url):urls[0],this.options.asyn);
		if(!isGet)xmlhttp.setRequestHeader("Content-Type",this.options.contentType);
		xmlhttp.onreadystatechange=function(){doProcess(obj,xmlhttp,fn,mime)};
		try{
			xmlhttp.overrideMimeType(this.options.mime+";charset="+this.options.charset);
		}catch(e){}
		xmlhttp.send(isGet?null:jBase.escape(urls[1]));
	}
	//Ajax:Request方法
	function Request(){
		this.arr=arguments;
		this.length=this.arr.length;
		switch(this.length){
			case 1:this.url=this.arr[0];this.options=init();break;
			case 2:this.url=this.arr[0];if(typeof(this.arr[1])=="function"){this.fn=this.arr[1];this.options=init();}else{this.options=init(this.arr[1]);}break;
			case 3:this.url=this.arr[0];if(typeof(this.arr[1])=="function"){this.options=init(this.arr[2]);this.fn=this.arr[1];}else{this.options=init(this.arr[1]);this.fn=this.arr[2];}break;
			default:alert("Ajax%u53C2%u6570%u9519%u8BEF!");break;
		}
		send(false,this.url,this.options,this.fn);
	}
	//Ajax:Updater方法
	function Updater(){
		this.arr=arguments;
		this.length=this.arr.length;
		switch(this.length){
			case 1:this.url=this.arr[0];this.options=init();break;
			case 2:this.obj=this.arr[0];this.url=this.arr[1];this.options=init();break;
			case 3:this.obj=this.arr[0];this.url=this.arr[1];if(typeof(this.arr[2])=="function"){this.fn=this.arr[2];this.options=init();}else{this.options=init(this.arr[2]);}break;
			case 4:this.obj=this.arr[0];this.url=this.arr[1];if(typeof(this.arr[2])=="function"){this.options=init(this.arr[3]);this.fn=this.arr[2];}else{this.options=init(this.arr[2]);this.fn=this.arr[3];}break;
			default:alert("Ajax%u53C2%u6570%u9519%u8BEF!");break;
		}
		send(this.obj,this.url,this.options,this.fn);
	}
})();