/******************************************************************************
Modify By:  Landers
*******************************************************************************/
function Ajax(recvType) {
	var aj = new Object();
	aj.targetUrl = '';
	aj.sendString = '';
	aj.recvType = recvType ? recvType : 'HTML';//HTML XML
	aj.resultHandle = null;
	var testVar1 = null

	aj.createXMLHttpRequest = function() {
		var request = false;
		if(window.XMLHttpRequest) {
			request = new XMLHttpRequest();
			//request = new ActiveXObject("Microsoft.XMLHTTP");
			if(request.overrideMimeType) {
				request.overrideMimeType('text/xml');
			}
		} else if(window.ActiveXObject) {
			var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
			for(var i=0; i<versions.length; i++) {
				try {
					request = new ActiveXObject(versions[i]);
					if(request) {
						return request;
					}
				} catch(e) {
					alert("XMLHttpRequest对象创建失败，请检查您的浏览器是否损坏。");
				}
			}
		}
		return request;
	}
	aj.XMLHttpRequest = aj.createXMLHttpRequest();

	aj.processHandle = function() {
		//aj.statusId.style.display = '';
		if(aj.XMLHttpRequest.readyState == 1) {
			//aj.statusId.innerHTML = '请等待，正在建立连接...';
		} else if(aj.XMLHttpRequest.readyState == 2) {
			//aj.statusId.innerHTML = '请等待，正在发送数据...';
		} else if(aj.XMLHttpRequest.readyState == 3) {
			//aj.statusId.innerHTML = '请等待，正在接受数据...';
		} else if(aj.XMLHttpRequest.readyState == 4) {
			if(aj.XMLHttpRequest.status == 200) {
				//aj.statusId.innerHTML = '通信成功，数据正在处理中...';
				if(aj.recvType == 'HTML') {
					//if (testVar1.indexOf("1.asp")>=0) alert(aj.XMLHttpRequest.responseText)
					if (aj.resultHandle!=null)	aj.resultHandle(aj.XMLHttpRequest.responseText);
				} else if(aj.recvType == 'XML') {
					if (aj.resultHandle!=null)	aj.resultHandle(aj.XMLHttpRequest.responseXML);
				}
				//aj.statusId.style.display = 'none';
			} else {
				//aj.statusId.innerHTML = '通信失败，请刷新重新尝试';
			}
		}
	}

	aj.get = function(targetUrl,resultHandle,IsAsynchronous) {
		aj.targetUrl = targetUrl;
		testVar1	 = targetUrl;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		if(window.XMLHttpRequest) {
			aj.XMLHttpRequest.open('GET',aj.targetUrl,IsAsynchronous);
			aj.XMLHttpRequest.send(null);
		} else {
	        aj.XMLHttpRequest.open("GET",targetUrl,IsAsynchronous);
	        aj.XMLHttpRequest.send();
		}
	}

	aj.post = function(targetUrl,sendString,resultHandle,IsAsynchronous){
		aj.targetUrl = targetUrl;
		aj.sendString = sendString;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		aj.XMLHttpRequest.open('POST', targetUrl,IsAsynchronous);
		aj.XMLHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		aj.XMLHttpRequest.send(aj.sendString);
	}
	
	return aj;
}

//===============================Ajax应用层模块By Landers)======================================
function AjaxPostForm(oForm,IsDecode,mySplit,IsMsg,IsClearForm){
	if (oForm==null){alert("oForm参数错误！");return null}
	if (oForm.IsAjax==null){
		oIsAjax = document.createElement("<input name='IsAjax' type='hidden' value='1'>")//创建一个<input name="IsAjax" value="1">
		oForm.appendChild(oIsAjax)
	}
	var strData = "",Ret = null,ObjElement
	for (var i=0;i<=oForm.elements.length-1;i++){							//收集数据
		ObjElement	= oForm.elements[i]

		//某些表单元素不需要发送到服务器，只需<input NoPost="1">即可
		if (ObjElement.NoPost!="1"){
			var Condition1 = (ObjElement.type=="radio"&&ObjElement.checked==true) //如果是radio,则一定要处于选中状态
			var Condition2 = (ObjElement.type!="radio")
			if (Condition1||Condition2){
				strData += ObjElement.name + "=" + UrlEncode1(ObjElement.value) + "&"
			}
		}
	}
	strData = strData.substring(0,strData.length-1)
	Ajax().post(oForm.action,strData,function(RetString){
		Ret = HandleRet(RetString,IsDecode,mySplit,IsMsg)
		if (Ret!="" && Ret!=false){//物理上，逻辑上都执行成功的话，则
			if (IsClearForm) ClearForm(oForm);						//清空表单
			ChangeMainSubmitStyle(oForm,"MainSubmit",0); 			//恢复提交按钮
		}
	},false)
	return Ret;
}

function AjaxGet(GetUrl,IsDecode,mySplit,IsMsg){
	var Ret = null
	var tmp = ""
	if(GetUrl.indexOf("IsAjax=1")==-1){	//加入IsAjax=1参数
		if (GetUrl.indexOf("?")>=0) tmp = "&" ;else tmp = "?"
		GetUrl += tmp + "IsAjax=1"
	}
	//alert(GetUrl)
	Ajax().get(GetUrl,function(RetString){
		Ret = HandleRet(RetString,IsDecode,mySplit,IsMsg)
	},false)
	return Ret
}

/*返回结果可能性：
		1. null,""	: HTTP 500 服务错误（物理错误）
		2. true		: Ajax页面返回执行成功（不需提示）
		3. false	: Ajax页面返回预料中的错误（不需提示）
		4. 字串 	: Ajax页面返回执行成功（其逻辑上是否成功与否，全在字串提示中，只是程序能成功执行和返回）
		5. 数组 	: Ajax页面返回执行成功（得到以数组方式呈现的数据，常用于AjaxGet返回的数据中)
IsMsg：是否直接显示返回信息，主要针对提示字符串	
*/
function HandleRet(strRet,IsDecode,mySplit,IsMsg){
	var Ret = ""
	if (strRet==null || strRet=="") return ""

	//处理数据
	if (isNaN(strRet)){
		var strTmp = strRet.toLowerCase()
		switch(strTmp){
			case "true" : Ret = true; break;
			case "false": Ret = false;break;
			default:
				if(IsDecode==true) strTmp = UrlDecode1(strRet); else strTmp = strRet;
				if(mySplit!=null && mySplit!=""){ Ret = strToArray(strTmp,mySplit)	}else{Ret = strTmp}
		}
	}else{Ret = Number(strRet)}
	if (IsMsg) alert(Ret)
	return Ret
}