//状态
//sanda lwq

/*---------------------------------------------------------------------
	变量定义
---------------------------------------------------------------------*/

var xml_http_building_link = 'xml http building link';
var xml_http_sending = 'xml http sending';
var xml_http_loading = 'xml http loading';
var xml_http_data_in_processed = 'xml http data in processed';
var xml_http_load_failed = 'xml http load failed';

//数组, 防止多次提交
var Ajaxs = new Array();

/*---------------------------------------------------------------------
	函数
---------------------------------------------------------------------*/

//解决 IE 的 XMLHttpRequest 读取中文网页时返回乱码
function gb2utf8(data){  
    var glbEncode = [];  
    gb2utf8_data = data;  
    execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");  
    var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");  
    t=t.split("@");  
    var i=0,j=t.length,k;  
    while(++i<j) {  
        k=t[i].substring(0,4);  
        if(!glbEncode[k]) {  
            gb2utf8_char = eval("0x"+k);  
            execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");  
            glbEncode[k]=escape(gb2utf8_char).substring(1,6);  
        }  
        t[i]=glbEncode[k]+t[i].substring(4);  
    }  
    gb2utf8_data = gb2utf8_char = null;  
    return unescape(t.join("%"));  
}

/*---------------------------------------------------------------------
	类定义
---------------------------------------------------------------------*/

//生成一个 Ajax Object
function Ajax(recvType, statusId) {
	var aj = new Object();
	aj.statusId = statusId ? document.getElementById(statusId) : null;
	aj.targetUrl = '';
	aj.sendString = '';
	aj.recvType = recvType ? recvType : 'XML';
	aj.resultHandle = null;
	aj.failedHandle = null;

	aj.createXMLHttpRequest = function() {
		var request = false;
		if(window.XMLHttpRequest) {
			//FireFox 等
			request = new XMLHttpRequest();
			if(request.overrideMimeType) {
				//针对不同的 recvType ,要采用不同的 overrideMimeType
				//如果对 XML 误用 text/html , 会找不到结点
				//如果对 HTML 误用 text/xml , 浏览器对标签的成对形式校验, 一般的 htm 会被认为有问题
				//对于 HTML , 加上 charset , 使其可以正确显示中文
				if (aj.recvType == 'XML')
				{
					request.overrideMimeType('text/xml');
				} else if (aj.recvType == 'HTML'){
					request.overrideMimeType('text/html;charset=gb2312');
				}
			}
		} else if(window.ActiveXObject) {
			//IE
			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(e.message);
				}
			}
		}
		return request;
	}

	aj.XMLHttpRequest = aj.createXMLHttpRequest();

	//进程处理
	aj.processHandle = function() {
		if(aj.statusId) {
			//aj.statusId.style.display = '';		//调试时取消此行的注释
		}
		if(aj.XMLHttpRequest.readyState == 1 && aj.statusId) {
			//aj.statusId.innerHTML = xml_http_building_link;		//调试时取消此行的注释
		} else if(aj.XMLHttpRequest.readyState == 2 && aj.statusId) {
			//aj.statusId.innerHTML = xml_http_sending;		//调试时取消此行的注释
		} else if(aj.XMLHttpRequest.readyState == 3 && aj.statusId) {
			//aj.statusId.innerHTML = xml_http_loading;		//调试时取消此行的注释
		} else if(aj.XMLHttpRequest.readyState == 4) {
			if(aj.XMLHttpRequest.status == 200) {
				//数组处理
				arraydelstr(Ajaxs, aj.targetUrl);

				if(aj.statusId) {
					//aj.statusId.innerHTML = xml_http_data_in_processed;		//调试时取消此行的注释
					//aj.statusId.style.display = 'none';		//调试时取消此行的注释
				}
				if(aj.recvType == 'HTML') {
					//如果是IE, 且目标是 ANSI 文件, 要转换成UTF-8.
					//但如果目标是 Unicode 文件, 会出错, Unicode 文件无须转换, 即可正常显示.
					 if(window.ActiveXObject) {
						 aj.resultHandle(gb2utf8(aj.XMLHttpRequest.responseBody), aj);
					 } else {
						 aj.resultHandle(aj.XMLHttpRequest.responseText, aj);
					 }
				//传递HTML, 如果借用XML格式如下, 可绕过上述问题.
				//<?xml version="1.0" encoding="gbk"?><root><![CDATA[......]]></root>
				//用aj.XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue 可取得 CDATA[......] 中的内容
				} else if(aj.recvType == 'XML') {
					aj.resultHandle(aj.XMLHttpRequest.responseXML, aj);
				}
			} else {
				//处理读取失败
				if(aj.failedHandle) {
					aj.failedHandle();
				}
				if(aj.statusId) {
					//aj.statusId.innerHTML = xml_http_load_failed;		//调试时取消此行的注释
				}
				//数组处理
				arraydelstr(Ajaxs, aj.targetUrl);
			}
		}
	}

	//get 加上 failedHandle
	aj.get = function(targetUrl, resultHandle, failedHandle) {
		if(in_array(targetUrl, Ajaxs)) {
			return false;
		} else {
			//数组处理
			arrayaddstr(Ajaxs, targetUrl);//arraypush
		}
		aj.targetUrl = targetUrl;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		aj.failedHandle = failedHandle;
		if(window.XMLHttpRequest) {
			aj.XMLHttpRequest.open('GET', aj.targetUrl);
			aj.XMLHttpRequest.send(null);
		} else {
			aj.XMLHttpRequest.open('GET', targetUrl, true);
			aj.XMLHttpRequest.send();
		}
	}

	//post
	aj.post = function(targetUrl, sendString, resultHandle, failedHandle) {
		if(in_array(targetUrl, Ajaxs)) {
			return false;
		} else {
			//数组处理
			arrayaddstr(Ajaxs, targetUrl);//arraypush
		}
		aj.targetUrl = targetUrl;
		aj.sendString = sendString;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		aj.failedHandle = failedHandle;
		aj.XMLHttpRequest.open('POST', targetUrl);
		aj.XMLHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		aj.XMLHttpRequest.send(aj.sendString);
	}
	return aj;
}
