//-- CONSTANTS
var ERROR_DB_CONCURRENCY			= -5
var ERROR_DB_RECORD_NOT_FOUND		= -4

/*__________________________________________________________________
**
**   AJAX CUSTOM FUNCTIONS
**__________________________________________________________________*/
var WAITING_FOR_REQUEST =  false;
						
//-- this is a reusable ajax post get callback function
function makeHttpRequest(url, callback_function, return_xml,req_method,req_query)
{
	var http_request = false;

	//-- Mozilla, Safari, FireFox
	if (window.XMLHttpRequest) 
	{ 
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/xml');
		}
	} 
	//-- IE
	else if (window.ActiveXObject) 
	{
		try 
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}
	if (!http_request)
	{
		alert('Unfortunatelly you browser doesn\'t support XML Objects. Please contact your network administrator');
		return false;
	}
	http_request.onreadystatechange = function()
	{
		if (http_request.readyState == 4) 
		{
			if (http_request.status == 200) 
			{
				if (return_xml) 
				{
					eval(callback_function + '(http_request.responseXML)');
				} 
				else 
				{
					eval(callback_function + '(http_request.responseText)');
				}
			} 
			else 
			{
				postRequest();
				alert('There was a problem with the request.(Code: ' + http_request.status + ')');
				
			}
		}
	}
	http_request.open(req_method, url, true);
	//-- if we post sent the nessasary http header
	if (req_method == "POST")
	{
		http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	}
	http_request.send(req_query);
}
//-- checks XML document integrity from server response
function xmlIntegrity(Xmlresponse,getListName, concurrencyDelegate,notFoundDelegate)
{
	//-- check XML integrety
	if (!Xmlresponse.getElementsByTagName("errornum")[0].firstChild)
	{
		showObject(document.getElementById("genPgError"));
		document.getElementById("genPgErrorEdit").innerHTML = "Database Error Contact Administrator"
		postRequest();
		return null;
	}
	var errOutPut = Xmlresponse.getElementsByTagName("errornum")[0].firstChild.nodeValue;
	//-- make sure we have no error if error =0 no error occued
	if (errOutPut != 0)
	{
		if (Xmlresponse.getElementsByTagName("message")[0].firstChild)
		{
			//--use delegate to handle concurrency issues not found and updated
			if (Xmlresponse.getElementsByTagName("errornum")[0].firstChild.nodeValue == ERROR_DB_CONCURRENCY && (concurrencyDelegate))
			{
				eval(concurrencyDelegate + '(Xmlresponse)');
				return null;
			}
			else if (Xmlresponse.getElementsByTagName("errornum")[0].firstChild.nodeValue == ERROR_DB_RECORD_NOT_FOUND && (notFoundDelegate))
			{
				eval(notFoundDelegate + '(Xmlresponse)');
				return null;
			}
			showObject(document.getElementById("genPgError"));
			document.getElementById("genPgErrorEdit").innerHTML = Xmlresponse.getElementsByTagName("message")[0].firstChild.nodeValue;
		}
		else
			document.getElementById("genPgErrorEdit").innerHTML = "Database Error Contact Administrator"
		postRequest();
		return null;
	}
	//-- if no element list to return then make sure we have no errors
	if (getListName == null)
		return 1;

	//-- get the KSS list object
	if (Xmlresponse.getElementsByTagName(getListName)[0])
		return Xmlresponse.getElementsByTagName(getListName)[0];
	
	document.getElementById("genPgErrorEdit").innerHTML = "Database Error Contact Administrator"
	showObject(document.getElementById("genPgError"));
	postRequest();
	return null;
}
//-- request finished cancel waiting
function postRequest()
{
	WAITING_FOR_REQUEST = false;
}
//-- clears error message and starts request
function preRequest()
{
		return true;		
}
