
function ajaxNewRequest() {
	var httpRequest;
	if (window.XMLHttpRequest) {
		// Safari, Firefox, Internet Explorer 7
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType)
			httpRequest.overrideMimeType('text/xml');
	} else if (window.ActiveXObject) {
		// Internet Explorer 5 and 6
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
			}
		}
	}
	return httpRequest;
}

function ajaxEncodeParams(paramMap) {
	var encoded = "";
	for (var paramName in paramMap) {
		var paramValue = paramMap[paramName];
		if (encoded.length > 0)
			encoded += "&";
		encoded += paramName + "=" + encodeURIComponent(paramValue);
	}
	return encoded;
}

function ajaxRequest(url, params, listener) {
	var httpRequest = ajaxNewRequest();
	if (httpRequest) {
		httpRequest.__listener__ = listener;
		httpRequest.onreadystatechange = function() {
			if (httpRequest.readyState == 4) {
				if(httpRequest.status == 200)
					httpRequest.__listener__.ajaxSuccess(httpRequest);
				else
					httpRequest.__listener__.ajaxFailure(httpRequest);
			}
		};
		httpRequest.open("POST", url, true);
		httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
		httpRequest.send(ajaxEncodeParams(params));
	} else
		listener.ajaxFailure(null);
}

