/* XML http request functions */

var XMLHttpRequestResponce = null;
var XMLHttpRequestObject = null;
var gCallServerDelayedTimer = 0;
var gCallServerDelayedInputField = null;
var gCallServerDelayedObjectName = null;
var gCallServerDelayedCallback = null;
var gCallServerDelayedExtend = null;
var gCallServerDelayedUrl = null;
var gCallServerDelayedContent = null;
var gCallServerDelayedLoadingIcon = null;
var gCallServerDelayedMinCharacters = null;

function GetXMLHttpRequest() 
{
	var object = null;
	
	if (window.XMLHttpRequest) 
	{
	    object = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) 
	{
	    try
	    {
		object = new ActiveXObject("Msxml2.XMLHTTP");
	    }
	    catch(e)
	    {
	    }
	    
	    if (object == null)
	    {
		try
		{
		    object = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e)
		{
		}
	    }
	}
	
	if (object == null)
	{
	    alert("Your browser does not support AJAX");
	}
	
	return object;
}

function CallServer(objectname,callback,extend,url,content)
{
	if (XMLHttpRequestObject == null)
	{
		XMLHttpRequestObject = new Array();
	}
	
	var requestObject = GetXMLHttpRequest();
	if (requestObject)
	{
		XMLHttpRequestObject[objectname] = new Object();
		XMLHttpRequestObject[objectname].requestObject = requestObject;
		if (callback)
		{
			XMLHttpRequestObject[objectname].callback = callback;
		}
		if (extend)
		{
			XMLHttpRequestObject[objectname].extend = extend;
		}
		
		requestObject.onreadystatechange = new Function ("OnCallServerProcess('" + objectname + "')");
		
		requestObject.open("POST", url, true);
		requestObject.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded; charset=UTF-8" );
		requestObject.send(content);
	}
	
	return true;
}

function CallServerAbort(objectname)
{
	if (XMLHttpRequestObject != null)
	{
		if (XMLHttpRequestObject[objectname] != null)
		{
			XMLHttpRequestObject[objectname].abort();
		}
	}
}

function OnCallServerProcess(objectname)
{
	if (XMLHttpRequestObject[objectname] != null && XMLHttpRequestObject[objectname].requestObject &&
		XMLHttpRequestObject[objectname].requestObject.readyState == 4)
	{
		if (XMLHttpRequestObject[objectname].requestObject.status == 200) 
		{
			// Get responce
			var responce = XMLHttpRequestObject[objectname].requestObject.responseText;
			// Call callback
			if (XMLHttpRequestResponce == null)
			{
				XMLHttpRequestResponce = new Array();
			}
			XMLHttpRequestResponce[objectname] = new Object();
			XMLHttpRequestResponce[objectname].responce = responce;

			if (XMLHttpRequestObject[objectname].extend)
			{
				XMLHttpRequestResponce[objectname].extend = XMLHttpRequestObject[objectname].extend;
			}
			if (XMLHttpRequestObject[objectname].callback != null)
			{
				XMLHttpRequestObject[objectname].callback();
			}
			XMLHttpRequestObject[objectname] = null;
		}
		else
		{
			alert("Request failed: " + XMLHttpRequestObject[objectname].requestObject.status + " status returned");
			XMLHttpRequestObject[objectname] = null;
		}
	}
}

function GetServerResponce(objectname)
{
	if (XMLHttpRequestResponce != null)
	{
		return XMLHttpRequestResponce[objectname].responce;
	}
}

function GetServerResponceExtend(objectname)
{
	if (XMLHttpRequestResponce != null)
	{
		return XMLHttpRequestResponce[objectname].extend;
	}
}

function CallServerDelayed(objectname,callback,extend,url,content,inputfield,loadingicon,mincharacters)
{
	if (mincharacters != null && mincharacters != 0)
	{
		gCallServerDelayedMinCharacters = mincharacters;
	}
	else
	{
		gCallServerDelayedMinCharacters = 4;
	}
	
	if (inputfield != null)
	{
		if (inputfield.value.length < gCallServerDelayedMinCharacters)
		{
			clearTimeout(gCallServerDelayedTimer);
			gCallServerDelayedTimer = 0;
			return;
		}
	}
	
	// Start timer to trigger the search
	// if previous timer clear it
	gCallServerDelayedInputField = inputfield;
	
	if (gCallServerDelayedTimer != 0)
	{
		clearTimeout(gCallServerDelayedTimer);
	}
	
	gCallServerDelayedObjectName = objectname;
	gCallServerDelayedCallback = callback;
	gCallServerDelayedExtend = extend;
	gCallServerDelayedUrl = url;
	gCallServerDelayedContent = content;
	gCallServerDelayedLoadingIcon = loadingicon;
	
	gCallServerDelayedTimer = setTimeout("CallServerDelayedStart()",400);
}

function CallServerDelayedStart()
{
	// Clear timer
	if (gCallServerDelayedTimer != 0)
	{
		clearTimeout(gCallServerDelayedTimer);
		gCallServerDelayedTimer = 0;
	}
	// double check for inputfield length
	if (gCallServerDelayedInputField != null)
	{
		if (gCallServerDelayedInputField.value.length < gCallServerDelayedMinCharacters)
		{
			clearTimeout(gCallServerDelayedTimer);
			gCallServerDelayedTimer = 0;
			return;
		}
	}
	
	if (gCallServerDelayedLoadingIcon != null)
	{
		var searchicon = document.getElementById(gCallServerDelayedLoadingIcon);
		searchicon.src = "loading14x14.gif";
	}
	CallServer(gCallServerDelayedObjectName,new Function("CallServerDelayedReturn()"),gCallServerDelayedExtend,gCallServerDelayedUrl,gCallServerDelayedContent);
}

function CallServerDelayedReturn()
{
	if (gCallServerDelayedLoadingIcon != null)
	{
		var searchicon = document.getElementById(gCallServerDelayedLoadingIcon);
		searchicon.src = "blanck14x14.gif";
	}
	gCallServerDelayedCallback();
}


