var ajax = null;

/* Create HTTP Request Object */
function createHttpRequest() {
	var req = null;
	if(typeof XMLHttpRequest != "undefined") {
		req = new XMLHttpRequest();
	} else { // IE or an other error occured
		try {
			req = new ActiveXObject("MSXML2.XMLHTTP");
		} catch(err_MSXML2) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(err_Microsoft) {
				alert('Sorry, no AJAX Requests supported by your browser');
			}
		}
	}
	return req;
}

/* makes AJAX Request */
function makeAsyncRequest(target, parameters, processresponsefunction, functionparameters, method, conntype) {
	if(method==null) method = "POST";
	if(conntype==null) conntype = "Close"; // "Keep-Alive" or "Close"
	
	// local variable to avoid errors/problems while using same HTTPRequestObject multiple times
	var oHttpRequest = createHttpRequest();
	
	oHttpRequest.onreadystatechange = function() { handleAsyncRequestResponse(oHttpRequest, processresponsefunction, functionparameters); };
	
	oHttpRequest.open(method, target, true);
	oHttpRequest.setRequestHeader("Cache-Control", "no-cache");
	oHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	if(parameters != null) {
		oHttpRequest.setRequestHeader("Content-length", parameters.length);
	}
	
	oHttpRequest.setRequestHeader("Connection", conntype);
	oHttpRequest.send(parameters);
}

/* Handle Function, calls specific handler if ready */
function handleAsyncRequestResponse(oHttpRequest,processresponsefunction, functionparameters) {
	if(oHttpRequest.readyState == 4) {
		processresponsefunction(oHttpRequest, functionparameters);
		// eventually oHttpRequest should be cleared after handled:
		oHttpRequest = null;
	}
}

/* makes AJAX Request to request JSON data */
function makeJSONRequest(target, parameters, processresponsefunction, functionparameters) {
	makeAsyncRequest(
		target,
		parameters,
		function(oHttpRequest, functionparameters) { 
			if(oHttpRequest.status == 200) {
				var responsedata = eval('(' + oHttpRequest.responseText + ')');
				processresponsefunction(true, responsedata, functionparameters);
			} else {
				processresponsefunction(false);
			}
		},
		functionparameters
	);
}

/* start new ajax request */
function loadajax(url, method, params, function_name)
{
	ajax = createHttpRequest();
	
	// init succeded
	if (ajax != null)
	{
		if(method == "GET")
		{
			ajax.onreadystatechange = function_name;
			ajax.open('GET',url,true)
			ajax.send(null)
		}
		else
			if(method == "POST")
			{
				ajax.onreadystatechange = function_name;
				ajax.open('POST',url,true)
				ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				ajax.setRequestHeader("Content-length", params.length);
				ajax.setRequestHeader("Connection", "close");
				ajax.send(params)
			}
	}
}
