var g_ajaxObj = null;
var g_debStatus = false;

function xmlGetNodeValue (NodeObj, NodeName)
{
   if (NodeObj && NodeObj.getElementsByTagName(NodeName) && NodeObj.getElementsByTagName(NodeName).item(0) && NodeObj.getElementsByTagName(NodeName).item(0).firstChild)
      return NodeObj.getElementsByTagName(NodeName).item(0).firstChild.nodeValue;
   return "";
}

function CHTTPRequest()
{
	this.RequestObj = null;
	this.CallBack = null;
	this.done = false;
	this.PostData = null;
	this.URL = "";
	this.Method = 'GET';
	this.ContentType = '';
	this.Async = true;
	this.RequestsCollection = null;
	this.InProcessFlag = false;
   this.HeaderCallback = null;

	if (window.XMLHttpRequest)
		this.request = new XMLHttpRequest();
	else if (window.ActiveXObject)
	{
	   try
	   {
	      this.request = new ActiveXObject("Msxml2.XMLHTTP");
	   }
	   catch(e)
	   {
		   this.request = new ActiveXObject("Microsoft.XMLHTTP");
		}
   }

	this.SendRequest = CHTTPRequest_SendRequest;
}

//=======================================================================

function CHTTPRequest_SendRequest ()
{
	this.request.onreadystatechange = g_CAjax_RequestCallBack;
	this.request.open(this.Method, this.URL, this.Async);
	this.Status = "PROCESSING";
	if (this.HeaderCallback != null)
	{
	   this.HeaderCallback(this.request)
	}
	if (this.Method == 'POST')
	{
	   if (this.ContentType)
	      this.request.setRequestHeader("Content-type", this.ContentType);
      else
         this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded") ;
      this.request.setRequestHeader("Content-length", this.PostData.length);
	}
	this.InProcessFlag = true;
	this.request.send(this.Method == 'GET' ? null : this.PostData);
}

//=======================================================================
//=======================================================================

function CAjax()
{
	this.ajaxRequests = new Array(0);
	this.AbortRequests = CAjax_AbortRequests;
	this.AddRequest = CAjax_AddRequest;
	this.SendRequests = CAjax_SendRequests;
	this.avoidTimestamp = true;
	g_ajaxObj = this;
}

//=======================================================================

function g_CAjax_RequestCallBack ()
{
   for (var x=0; x < g_ajaxObj.ajaxRequests.length; x++)
   {
	   switch (g_ajaxObj.ajaxRequests[x].request.readyState)
	   {
		   case 4:
			   if (!g_ajaxObj.ajaxRequests[x].done)
			   {
				   g_ajaxObj.ajaxRequests[x].done = true;
				   if ( g_ajaxObj.ajaxRequests[x].CallBack != null)
					   g_ajaxObj.ajaxRequests[x].CallBack (ajaxObj.ajaxRequests[x].request);
				   g_ajaxObj.ajaxRequests.splice(x, 1);
				   return;
			   }
			   break;
	   }
   }
}

//=======================================================================

function CAjax_AbortRequests()
{
	for (var x = 0; x < this.ajaxRequests.length; x++)
		this.ajaxRequests[x].request.abort();
	this.ajaxRequests = new Array(0);
}

//=======================================================================

function CAjax_AddRequest ()
{
   var currRequestPos = 0;
   /*
   if (this.avoidTimestamp)
	{
		var tmpDate = new Date();
		if (url.indexOf("?") > -1 || url.indexOf("!") > -1) 
		   url += "&tmpTS=" + (tmpDate*1);
		else 
		   url += "!tmpTS=" + (tmpDate*1);
	}
	*/
	
	this.ajaxRequests.push(new CHTTPRequest());
	currRequestPos = this.ajaxRequests.length - 1;
	this.ajaxRequests[currRequestPos].RequestsCollection = this;

	return this.ajaxRequests[currRequestPos];
}

//=======================================================================

function CAjax_SendRequests ()
{
	for (var x = 0; x < this.ajaxRequests.length; x++)
	{
		if (!this.ajaxRequests[x].InProcessFlag)
		   this.ajaxRequests[x].SendRequest();
   }
}

//=======================================================================

