	var ajaxQueue = new Array();
	var queuePos = 0;
	var ajaxObject, ajaxFunction, ajaxTarget;
	var ajaxReady = true;

//--- INITIATE AN AJAX REQUEST TO POST A FORM AN DISPLAY THE COMPLETE RESPONSE IN A SPECIFIED CONTAINER (E.G. DIV)
	function ajaxUpdate(url, target, theForm)
	{
		if (theForm) sendAjaxRequest('POST', url, getPostParameters(theForm), 'ajaxUpdateHandler', target);
		else sendAjaxRequest('GET', url, '', 'ajaxUpdateHandler', target);
	}
	function ajaxUpdateHandler(theText)
	{
		//alert(theText);
		document.getElementById(ajaxTarget).innerHTML = theText;
		document.getElementById(ajaxTarget).style.display = '';
		if (document.getElementById('ajaxBox')) document.getElementById('ajaxBox').innerHTML = theText.replace(/>/g,'&gt;').replace(/</g,'&lt;');
	}

//--- INITIATE AN AJAX POST REQUEST USING THE FIELDS FROM A FORM
	function ajaxPost(url, theForm, functionToCall)
	{
		sendAjaxRequest('POST', url, getPostParameters(theForm), functionToCall, '');
	}

//--- FIND ALL CONTROLS IN A SPECIFIED FORM AND RETURN THEIR VALUES AS A NAME/VALUE STRING
	function getPostParameters(obj)
	{
		var getstr = '';
	//--- FIND INPUT FIELDS
		var controls = obj.getElementsByTagName("input");
		for (i = 0; i < controls.length; i++)
		{			
            if (controls[i].type == "text" || controls[i].type == "hidden") getstr += encodeURIComponent(controls[i].name) + "=" + encodeURIComponent(controls[i].value) + "&";
            if (controls[i].type == "checkbox") {
               if (controls[i].checked) getstr += encodeURIComponent(controls[i].name) + "=" + encodeURIComponent(controls[i].value) + "&";
               else getstr += controls[i].name + "=&";
            }
            if (controls[i].type == "radio") {
               if (controls[i].checked) getstr += encodeURIComponent(controls[i].name) + "=" + encodeURIComponent(controls[i].value) + "&";
            }
		}
	//--- FIND TEXTAREAS
		var controls = obj.getElementsByTagName("textarea");
		for (i = 0; i < controls.length; i++)
		{			
            getstr += encodeURIComponent(controls[i].name) + "=" + encodeURIComponent(controls[i].value) + "&";
		}
		
	//--- FIND SELECT LISTS
		var controls = obj.getElementsByTagName("select");
		for (i = 0; i < controls.length; i++)
		{
            getstr += encodeURIComponent(controls[i].name) + "="
			if (controls[i].selectedIndex != -1) getstr += encodeURIComponent(controls[i].options[controls[i].selectedIndex].value) + "&";
		}

		return getstr;
	}
	
//--- INITIATE AN AJAX GET REQUEST
	function ajaxGet(url, parameters, functionToCall)
	{
		sendAjaxRequest('GET', url, parameters, functionToCall, '');
	}

//--- CHECK FOR THE RESPONSE BACK FROM THE SERVER
	function stateChanged() 
	{
		if (ajaxObject.readyState==4) 
		{
			if (ajaxObject.status==200) eval(ajaxFunction + '(ajaxObject.responseText)');
			else alert('The system has encountered an error:\n\nError Description: An AJAX call returned a ' + ajaxObject.status + ' response before calling the ' + ajaxFunction + ' function.\n\n' + ajaxObject.responseText);
			queuePos += 1;
			if (ajaxQueue.length > queuePos) runRequest(queuePos);
		}
	}
	
	function sendAjaxRequest(method, url, parameters, functionToCall, target)
	{
		ajaxQueue[ajaxQueue.length] = new Object();
		var tempObject = GetXmlHttpObject()
	  	if (tempObject != null) 
		{		
			if (method == 'GET')
			{
				if (parameters) url = url + "?" + parameters;
				parameters = null;
			}
			tempObject.open(method, url, true);
			if (method == 'POST')
			{
				tempObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				//tempObject.setRequestHeader("Content-length", parameters.length);
				tempObject.setRequestHeader("Connection", "close");
			}
			ajaxQueue[ajaxQueue.length-1].functionname = functionToCall;
			ajaxQueue[ajaxQueue.length-1].theobject = tempObject;
			ajaxQueue[ajaxQueue.length-1].parameters = parameters;
			ajaxQueue[ajaxQueue.length-1].target = target;
			runIfPossible(ajaxQueue.length-1);
		}
	}
	
	function runIfPossible(position)
	{
		if(queuePos == position) runRequest(position);
	}

	function runRequest(position)
	{
		ajaxFunction = ajaxQueue[queuePos].functionname;
		ajaxObject = ajaxQueue[queuePos].theobject;
		ajaxTarget = ajaxQueue[queuePos].target;
		ajaxObject.onreadystatechange = stateChanged;
		ajaxObject.send(ajaxQueue[queuePos].parameters);
	}
	
//--- CREATE THE HTTP REQUEST OBJECT
	function GetXmlHttpObject()
	{
	  var xmlHttp=null;
	  try { 
		xmlHttp=new XMLHttpRequest();
		// Firefox, Opera 8.0+, Safari
		}
	  catch (e)
		{
		// Internet Explorer
		try
		  {
		  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		  }
		catch (e)
		  {
		  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		  }
		}
	  return xmlHttp;
	}