// Generic AJAX Functions
// Eg http://www.ecats.co.uk/pcpro/ajax/innerHTML.html

var xmlHttp;
var divTarget;
var htmlStart = "";
var htmlEnd = "";
var ajaxAction = "";
var ajaxCBFunc = "";

var READYSTATE_CREATED = 0;
var READYSTATE_READYTOSEND = 1;
var READYSTATE_SENT = 2;
var READYSTATE_RECEIVING = 3;
var READYSTATE_FINISHED = 4;

// Create the HttpRequest object. Browser-specific
function createXMLHttpRequest() 
{
    if (window.ActiveXObject) 
    {
		// Internet Explorer
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) 
    {
		// Mozilla, Safari, Opera etc
        xmlHttp = new XMLHttpRequest();
    }
}

// Start the request from the server. Store the target div id also
function AjaxStartRequest(source, action, target, start, end, ajaxcbfuncion) 
{
	ajaxAction = action;
	if (ajaxcbfuncion != null)
	{
    	ajaxCBFunc = ajaxcbfuncion;
	}
	if (action.length > 0)
	{
	    if (source.indexOf("?") >= 0)
	    {
		    source += "&a=" + action;
	    }
	    else
	    {
		    source += "?a=" + action;
	    }
	}
    createXMLHttpRequest();
	divTarget = target;
	htmlStart = start;
	htmlEnd = end;
	//alert (source);
	if (xmlHttp.readyState == READYSTATE_FINISHED || xmlHttp.readyState == READYSTATE_CREATED)
	{
        xmlHttp.onreadystatechange = HandleStateChange;
        xmlHttp.open("GET", source, true);
        xmlHttp.send(null);
	}
}

// State change event handler. If request result returned, set the
// return value as the innerHTML in the target div
function HandleStateChange() 
{
    if(xmlHttp.readyState == READYSTATE_FINISHED) 
    {
        if(xmlHttp.status == 200)
        {
			if (divTarget != null)
			{
				if (divTarget = "callback")
				{
				    if (ajaxCBFunc != "")
				    {
				        eval (ajaxCBFunc + "(ajaxAction, htmlStart + xmlHttp.responseText + htmlEnd);");
				    }
				    else
				    {
    					AjaxCallBack(ajaxAction, htmlStart + xmlHttp.responseText + htmlEnd);
				    }
					return;
				}
				else
				{
					switch (document.getElementById(divTarget).tagName)
					{
						case "div":
							document.getElementById(divTarget).innerHTML = htmlStart + xmlHttp.responseText + htmlEnd;
							break;
						default:
							alert (htmlStart + xmlHttp.responseText + htmlEnd);
							break;
					}
				}
			}
			else
			{
				alert (htmlStart + xmlHttp.responseText + htmlEnd);
			}
        }
    }
}