var AjaxMessageQueue = new Array();
var AjaxMessageCurrent = null;
var AjaxMessageXml = null;
var AjaxService = null;
var AjaxMessageTicks = 0;
var AjaxMessageTimeoutTicks = 50;

function AjaxMessage() {
	this.AddPair = AjaxMessageAddPair;
	this.Add = AjaxMessageAddPair;
	this.GetXmlMessagePost = AjaxGetXmlMessagePost;
	this.GetXmlMessageGet = AjaxGetXmlMessageGet;
	this.Callback = null;
}
function AjaxMessageAddPair(K, V) {
	this[K] = V;
}
function AjaxGetXmlMessagePost() {
	var Data = '<XML>\n';
	for (K in this) {
		var V = this[K];
		if(typeof(V) == 'function')
			continue;
		Data+='<'+K+'>'+V+'</'+K+'>\n';
	}
	Data+= '</XML>\n';
	return(Data);
}
function AjaxGetXmlMessageGet() {
	var Data = '?';
	for (K in this) {
		var V = this[K];
		if(typeof(V) == 'function')
			continue;

		Data+=K+'='+escape(V)+'&';
	}
	Data = Data.substring(0, Data.length - 1);
	return(Data);
}

function AjaxEnqueueMessage(Message)
{
	AjaxMessageQueue.push(Message);
}

function AjaxCreateMessage(Callback, Service)
{
	AjaxService = Service;
	var M = new AjaxMessage();
	M.Callback = Callback;
	return M;
}

function AjaxIsIdle()
{
	if(AjaxMessageQueue.length > 0)
	{
		return false;
	}

	return true;
}

function AjaxProcessMessage()
{
	setTimeout("AjaxProcessMessage();", 50);

	if(AjaxMessageCurrent != null)
	{
		AjaxMessageTicks++;
		if(AjaxMessageTicks > AjaxMessageTimeoutTicks)
		{
			//AjaxMessageCurrent = null;
		}
		return null;
	}

	if(AjaxMessageQueue.length > 0)
	{
		var New = AjaxMessageQueue.pop();
		
		AjaxMessageCurrent = New;
		AjaxMessageTicks = 0;

		AjaxPost();
	}
}

function AjaxStart()
{
	AjaxProcessMessage();
}

function AjaxPost() {
	if(window.XMLHttpRequest) {
		Request = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		Request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	
	Request.open("GET", AjaxService + AjaxMessageCurrent.GetXmlMessageGet());
	Request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	Request.setRequestHeader("Cache-Control", "no-cache");
	Request.onreadystatechange = AjaxResponse;
	Request.send(AjaxMessageCurrent.GetXmlMessagePost());
}

function AjaxResponse() {
	var Response = 0;
	if(Request.readyState == 4) {
		if(Request.status == 200) {
			var itemNodes = Request.responseXML.getElementsByTagName("xml");
			AjaxMessageXml = itemNodes[0];
			AjaxMessageCurrent.Callback(itemNodes[0]);
			AjaxMessageCurrent = null;
		}
	}
	return(Response);
}
function AjaxValue(Name) {
	return(AjaxMessageXml.getElementsByTagName(Name)[0].childNodes[0].nodeValue);
}
