var lastResponse = "";

function onAjaxRequest()
{
	/*
	// override like this:
	onAjaxRequest = function()
	{
		alert("onAjaxRequest Override!");
	}
	*/
}

function onAjaxComplete()
{
	/*
	// override like this:
	onAjaxComplete = function()
	{
		alert("onAjaxComplete Override!");
	}
	*/
}

function ajax(url,divId,noCache)
{
	if (typeof noCache == "undefined")
		noCache = false;
	if(noCache == "cache")
		noCache = false;
	lastResponse = "";
	var request = false;
	if(window.XMLHttpRequest)
	{
	request = new XMLHttpRequest();  
	}
	else if (window.ActiveXObject) // IE 
	{
		 try
		 {
			  request = new ActiveXObject("Msxml2.XMLHTTP");		
		 } 
		catch(e)
		{ 
			try
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");			
			} 
			catch (e)
			{
				request = false;
			}
		 }  
	}
	if(request)
	{
		var getUrl = url;
		if(noCache)
		{
			if(url.indexOf("?")<0)
				getUrl = url+"?noCache=" + new Date().getTime();	// force no cache
			else
				getUrl = url+"&noCache=" + new Date().getTime();	// force no cache
		}
		onAjaxRequest();
		document.body.style.cursor = "wait";
		request.open("GET", getUrl, true);
		request.onreadystatechange=function()
		{
			if (request.readyState==4)
			{
				if (request.status==200)
				{
					lastResponse = request.responseText;
		//			alert(lastResponse);
					document.getElementById(divId).innerHTML = lastResponse;
					onAjaxComplete();
				}
			  else //handle the HTTP error...
			  {
				alert("Error in ajax response.\nurl="+url+"\nelement="+divId);
			  }
			}
		}
		request.send(null);
		document.body.style.cursor = "default";
	}
	else	// no request
	{
		alert("Error in ajax request:\n"+url+"\nelement="+divId);
	}
}
