function ajax(){

	// Debug mode flag
	var debug = true;
	// XMLHttp enums
	var readyState_Uninitialized = 0;
	var readyState_Loading = 1;
	var readyState_Loaded = 2;
	var readyState_Interactive = 3;
	var readyState_Complete = 4;

	var m_PostValues = new Array();
	this.makeRequest = makeRequest;
	
	function getXMLHttpRequest() {	
	
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} else {
			if (window.XMLHttpRequestProgID) {
				return new ActiveXObject(window.XMLHttpRequestProgID);
			} else {
				var progIDs = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
				for (var i = 0; i < progIDs.length; ++i) {
					var progID = progIDs[i];
					try {
						var x = new ActiveXObject(progID);
						window.XMLHttpRequestProgID = progID;
						return x;
					} catch (e) {
					}
				}
			}
		}
		return null;
		
	}

	function makeRequest(url, isAsync, callbackFunction, callbackParams) {	
		
		var xmlHttp = new getXMLHttpRequest();
		var result = null;
		var requestUrl = url;// + '&t=' + d.getMinutes() + d.getSeconds() + d.getMilliseconds();
		var reqMethod = '';
		var data = '';

		//now we got the XmlHttpRequest object, send the request.
		if (xmlHttp)
		{
		
			if (m_PostValues.length > 0)
			{
				reqMethod = 'POST';
			}
			else
			{
				reqMethod = 'GET';
			}
		
			xmlHttp.open(reqMethod,requestUrl,isAsync);
			xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
			xmlHttp.setRequestHeader("Accept-Encoding", "gzip, deflate");
			
			if (m_PostValues.length > 0)
			{
				for (i = 0; i < m_PostValues.length; i++)
				{
					if (data != '') data += '&';
					data += m_PostValues[i][0] + '=' + m_PostValues[i][1];
				}
			}	
		
			if (callbackFunction)
			{
				xmlHttp.onreadystatechange = function () 
					{
						if (xmlHttp && xmlHttp.readyState==4)
						{// Value was returned
							if (xmlHttp.status==200)
							{
								var response = xmlHttp.responseText;
								var functionToCall = callbackFunction+'(response,'+callbackParams+')';
								if(debug){
									alert(response);
									alert(functionToCall);
								}
								eval(functionToCall);
							} else if(debug){
								document.write(xmlHttp.responseText);
							}
						}
					}
			}
			
			xmlHttp.send(data);
			
			if (!callbackFunction) 
			{
				if (xmlHttp.status==200) result = xmlHttp.responseText;
			}
			
			return result;
		}
	} 

}
