// Utility functions to make handling "ajax" request and response handling easier:
var ajax_objRequest = null;
var ajax_fnResponseHandler;
var ajax_processing = false;

// This function is for GET:
function ajax_getResponse(strURL, fnResponseHandler)
{
	ajax_getValidRequestObj();
  
  // Generate a timestamp to stick on the URL QS so that each GET is unique - should
  // prevent cacheing issues:
  var objDate = new Date();
  var strTimeStamp = objDate.getTime();
  strURL += "&_ajax_ts=" + strTimeStamp; // NB: Assumes passed URL has a QS!!!

	ajax_fnResponseHandler = fnResponseHandler;


  if (ajax_objRequest != null)
  {
    // Now set up a handler for the response - use the onreadystatechange event:
    ajax_objRequest.onreadystatechange = _ajax_handleReadyStateChange;
    
    // Make the request:
 		ajax_objRequest.open("GET", strURL, true)
 		ajax_objRequest.send(null);
		ajax_processing = true;
  }
}

// This function is for POST:
function ajax_getResponse_POST(strURL, strParams, fnResponseHandler)
{
	ajax_getValidRequestObj();

  // Generate a timestamp to stick on the URL QS so that each GET is unique - should
  // prevent cacheing issues:
  var objDate = new Date();
  var strTimeStamp = objDate.getTime();
  strParams += "&_ajax_ts=" + strTimeStamp; // NB: Assumes passed URL has a QS!!!

	ajax_fnResponseHandler = fnResponseHandler;

  if (ajax_objRequest != null)
  {
    // Now set up a handler for the response - use the onreadystatechange event:
    ajax_objRequest.onreadystatechange = _ajax_handleReadyStateChange;
    
    // Make the request:
 		ajax_objRequest.open("POST", strURL, true)
    ajax_objRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 		ajax_objRequest.send(strParams);
		ajax_processing = true;
  }
}

function ajax_isProcessing()
{
	return ajax_processing;
}

function ajax_getValidRequestObj()
{
  // Browser-dependent:
	try
  {
		// Opera 8.0+, Firefox, Safari...
		ajax_objRequest = new XMLHttpRequest();
	}
  catch(e)
  {
		// Bang! So probably using Internet Explorer:
		try
    {
			ajax_objRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
    catch(e) 
    {
			try
      {
				ajax_objRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
      catch(e)
      {
				alert("The browser, or current browser settings, do not support XMLHTTP. Operation denied.");
			}
		}
	}
}

function _ajax_handleReadyStateChange()
{
  if (ajax_objRequest.readyState == 4) // 4 = load complete
  {
		ajax_processing = false;
  	ajax_fnResponseHandler(ajax_objRequest.responseText);
  }
}

function ajax_tryDecodeResponse(strCode)
{
	var retVal = null;
	try
  {
  	retVal = eval("(" + strCode + ")");
	  return retVal;
  }
  catch (e)
  {
    // The response was probably an error message from script on server, rather than a json-ified object:
  	alert(strCode);
  }
}

