function Parameters() {
	var keyArray = new Array();
	var valueArray = new Array();
	
	this.add = function(key, value) {
		keyArray[keyArray.length] = key;
		valueArray[valueArray.length] = value;
	}
	
	this.toString = function() {
		var str = "";
		for(var i=0;i<keyArray.length;i++) {
			if(i>0) {
				str += "&";
			}
			str += keyArray[i] + "=" + urlEncode(valueArray[i]);
		}
		return str;
	}
}

function newXMLHttpRequest() {
	var req = false;
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if(req.overrideMimeType) {
			req.overrideMimeType("text/plain");
		}
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("无法创建 XMLHttpRequest 对象！");
			}
		}
	}
	return req;
}

function sendRequest(url, params, needTextOrXML, dealResponseFunc, tag) {
	var req = newXMLHttpRequest();
	var handlerFunction;
	if(tag == null) {
		handlerFunction = getReadyStateSimpleHandler(req, needTextOrXML, dealResponseFunc);
	} else {
		handlerFunction = getReadyStateComplexHandler(req, needTextOrXML, dealResponseFunc, tag);
	}
	req.onreadystatechange = handlerFunction;
	req.open("POST", url, true);
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	req.send(params.toString());
}

function getReadyStateSimpleHandler(req, needTextOrXML, dealResponseFunc) {
	return function () {
		if(req.readyState==4) {
			if(req.status==200) {
				var content = needTextOrXML ? req.responseText : req.responseXML;
				dealResponseFunc(content);
			} else {
				alert("有错误 request status : " + req.status + "！");
			}
		}
	}
}

function getReadyStateComplexHandler(req, needTextOrXML, dealResponseFunc, tag) {
	var flag = tag.innerText ? false : true;
	var value = flag ? tag.value : tag.innerText;
	return function () {
		if(req.readyState==1 || req.readyState==2) {
			tag.disabled = true;
			if(flag) tag.value = "加载";
			else tag.innerText = "加载";
		} else if(req.readyState==3) {
			if(flag) tag.value = "交互";
			else tag.innerText = "交互";
		} else if(req.readyState==4) {
			if(flag) tag.value = "完成";
			else tag.innerText = "完成";
			if(req.status==200) {
				var content = needTextOrXML ? req.responseText : req.responseXML;
				dealResponseFunc(content);
			} else {
				alert("有错误 request status : " + req.status + "！");
			}
			tag.disabled = false;
			if(flag) tag.value = value;
			else tag.innerText = value;
		}
	}
}