var lAjaxer = function(){
	var lenARG=arguments.length,objARG=arguments;
	var objARG=lenARG>0?typeof(objARG[0])=="object"?objARG[0]:{}:{};
	this.type=objARG.type?objARG.type:"TEXT";	//AJAX返回数据的类型: "TEXT"-文本型(包括HTML代码片段), "XML"- XML格式;
	this.version="1.0.0622.0";
}

lAjaxer.prototype.$ = function(o){return typeof(o)=="string" ? document.getElementById(o) : o;}
lAjaxer.prototype.createXmlHttpRequest = function() {
	var i,o;
	try { o=new XMLHttpRequest; }
	catch(e) {
		var arrXmlHttp = ['Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP'];
		for(i=0;i<arrXmlHttp.length;i++) {
			try { o=new ActiveXObject(arrXmlHttp[i]); } catch(e2) { continue; }
			break;
		}
	}
	return o;
}

lAjaxer.prototype.formatCallBack = function(f){
	var fType = typeof(f);
	if (fType=="function"){return f;};
	if (fType=="string" || fType=="object")	{
		f = this.$(f);
		if(f.tagName=="INPUT" || f.tagName=="TEXTAREA")	{
			return function(s){f.value = s;};
		} else {
			return function(s){f.innerHTML = s;};
		}
	} else {
		return function(){};
	}
}

lAjaxer.prototype.formatForm = function(oForm){
	var s1="",s2="",e=null,s3="";
	for (var i=0;i<oForm.length ;i++){
		e=oForm[i];
		if (e.name) {
			if (e.type=='select-one') {
				s3=e.length>0?e.options[e.selectedIndex].value:"";
			} else if (e.type=='select-multiple') {
				for (var n=0;n<e.length;n++) {
					var op=e.options[n];
					if (op.selected) {
						s1+=s2+e.name+'='+encodeURIComponent(op.value);
						s2="&"
					}
				}
				continue;
			} else if (e.type=='checkbox' || e.type=='radio') {
				if (e.checked==false) {   
					continue;   
				}   
				s3=e.value;
			} else if (typeof e.value != 'undefined') {
				s3=e.value;
			} else {
				continue;
			}
			s1+=s2+e.name+'='+encodeURIComponent(s3);
			s2="&";
		}

	}
	return s1;
}

lAjaxer.prototype.load = function(s1,s2,f,m) {
	f = this.formatCallBack(f);
	m=m.toUpperCase();
	var oLoader=this.createXmlHttpRequest();
	var dataType = this.type;
	if (m=='GET'){
		urls=s1.split("?");
		if (urls[1]=='' || typeof urls[1]=='undefined'){
			s1=urls[0]+"?"+s2;
		} else {
			s1=urls[0]+"?"+urls[1]+"&"+s2;
		}
		s2=null;
	}
	oLoader.open(m,s1,true);
	if (m=="POST"){
		//oLoader.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		oLoader.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
	}
	oLoader.onreadystatechange = function(){
		if (oLoader.readyState==1) {
			f("<DIV class='loading'><IMG src='images/loading.gif' width=16 height=16></DIV>");
		}
		if (oLoader.readyState==4) {
			if (oLoader.status == 200) 
			{
				f(dataType=="XML"?oLoader.responseXML:oLoader.responseText);
			}
		   else if (oLoader.status == 404) f("Error: Request URL does not exist.");
		   else f("Error: status code is " + oLoader.status);
			oLoader.onreadystatechange = new Function("return;");
			oLoader = null;
		}
	}
	oLoader.send(s2);
}

lAjaxer.prototype.get = function(sUrl,fCallBack){
	if(sUrl.indexOf('?')==-1)
	{
		sUrl=sUrl+'?timestamp='+new Date().getTime();
	}
	else
	{
		sUrl=sUrl+'&timestamp='+new Date().getTime();
	}
	var URL = sUrl.split("?");
	this.load(URL[0],URL[1],fCallBack,"GET");
	URL = null;
}

lAjaxer.prototype.submit = function(oForm,fCallBack) {
	try {
		oForm = this.$(oForm);
		this.load(
			oForm.action,
			this.formatForm(oForm),
			fCallBack,
			oForm.method
			);
	} catch (e) {
		alert("Error: Ajax submit is error.");
	}
}

lAjaxer.prototype.post = function(sUrl,fCallBack){
	var URL = sUrl.split("?");
	this.load(URL[0],URL[1],fCallBack,"POST");
	URL = null;
}


lAjaxer.prototype.onLoad = function(f){
	//加载提示，待写中
}
lAjaxer.prototype.onError = function(f){
	//容错处理，待写中
}

/*******************************************************************
Example:
var demoAjaxer = new lAjaxer();
var demoAjaxer = new lAjaxer({type:"TEXT"});	//声明数据类型为TEXT，默认值
var demoAjaxer = new lAjaxer({type:"XML"});		//声明数据类型为XML

demoAjaxer.get(strUrl,callBack)
参数 strUrl :
请求URL, 类型:string
参数callBack:
回调处理, 该参数可以用以下三种类型:
 string,object,funtion
1)string : 传入是页面中某个DOM对象的id，本AJAX类的回调处理函数会自动将返回结果写入该DOM对象的innerHTML、value ...
2)object : 传入是页面DOM对象，回调处理同上
3)funtion: 自定义回调函数名，AJAX类将调用所传自定义回调函数，进行回调处理。
				

ex_1: callBack参数为DOM对象的id
	demoAjaxer.get("example.asp?user=枫岩","ChkUserMsg");

ex_2: callBack参数为DOM对象
	demoAjaxer.get("example.asp?user=枫岩",this.form.content);

ex_3: callBack参数为自定义单参数回调函数
	demoAjaxer.get("example.asp?user=枫岩",myCallBack);
	function myCallBack(s){
		//自定义的回调处理过程
	}

ex_4: callBack参数为自定义多参数回调函数
	demoAjaxer.get("example.asp?user=枫岩",function(s){myCallBack(s,a1,a2,a3,a4,...);});
	function myCallBack(s,a,b,c,d,...){
		//自定义多参数的回调处理过程
		//在用AJAX类调用多参数回调处理时，可先使用匿名函数来调用本函数
	}

demoAjaxer.post(sUrl,fCallBack) 和 demoAjaxer.submit(oForm,,fCallBack) 的用法与get类似，不再举例
********************************************************************/

var ajax = new lAjaxer();

function SetDiv(id,content)
{
	ajax.$(id).innerHTML=content;
}

function AppendDiv(id,content)
{
	ajax.$(id).innerHTML+=content;
}