//$Id: simpleajax.js 2540 2006-09-26 00:05:07Z joe $
//BEGIN SIMPLE AJAX ENGINE
function createHTTPObject()
{
	var result;
	if (window.XMLHttpRequest) { // Non-IE browsers
		result = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		result = new ActiveXObject('Microsoft.XMLHTTP');
	} else {
		result = false;
	}
	return result;
}

function ajaxPOST(url, requestData, responseHandler, async)
{
	var http = createHTTPObject();
	if (http) {
		http.open('POST', url, async);
		http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http.onreadystatechange = function() { processStateChange(http, responseHandler, url, requestData, async); }	
		http.send(requestData);
	}
	return http;
}

function processStateChange(http, responseHandler, url, requestData, async)
{
	// readyState 4 = 'COMPLETE'
	if (http.readyState == 4) {
		switch(http.status) {
			case   200:
				eval(responseHandler + '_result(http)');
				break;
			//IE will abort the connection as it pleases
			//and return random wininet error codes when under ssl
			//when one of those codes is received we simply try the
			//request again
			case 12002:
			case 12029:
			case 12030:
			case 12031:
			case 12152:
			//mozilla/firefox abort code
			case 13030:
				ajaxPOST(url, requestData, responseHandler, async);
				break;
			default:
		}
	}
}

function ajaxRequest(url, responseHandler)
{
	var requestData = new Array();
	var argCount = arguments.length;

	requestData.push('handler='+responseHandler);
	for (var i = 2; i <= argCount; i++) {
		requestData.push('arg'+(i-2)+'='+arguments[i]);
	}
	requestData.push('time='+Date());
	requestData = requestData.join('&');
	return ajaxPOST(url, requestData, responseHandler, true);
}
// END SIMPLE AJAX ENGINE
