var xmlreqs = new Array();

function CXMLReq(inuse)
  {
	this.inuse = inuse;	// xml request object in use or not 0/1
	this.xmlhttp = false;	// xml request object
	this.response = null;	// pointer to response handler function
	this.error = null;	// pointer to error handler function
	if (window.XMLHttpRequest)
	  {	this.xmlhttp = new XMLHttpRequest();
	  } 
	else if (window.ActiveXObject)
	  {	this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  }
  }

function xmlreqpos()
  {
	var pos;

	for (pos = 0; pos < xmlreqs.length; pos++)
	  {	if ( xmlreqs[pos].inuse == 0 )
		  {	break;
		  }
	  }
	if (pos == xmlreqs.length)
	  {	xmlreqs[pos] = new CXMLReq(0);
	  }
	return pos;
  }

function xmlreqGET(url, responsefun, errorfun)
  {	
	var pos;

	pos = xmlreqpos();
	if (xmlreqs[pos].xmlhttp)
	  {	xmlreqs[pos].inuse = 1;
		xmlreqs[pos].response = responsefun;
		xmlreqs[pos].error = errorfun;
		xmlreqs[pos].xmlhttp.open("GET",url);
		xmlreqs[pos].xmlhttp.onreadystatechange = function()
		  {	if (typeof(xmlhttpChange) != 'undefined')
		  	  {	xmlhttpChange(pos);
		  	  }
		  }
		if (window.XMLHttpRequest)
		  {	xmlreqs[pos].xmlhttp.send(null);
		  }
		else if (window.ActiveXObject)
		  {	xmlreqs[pos].xmlhttp.send();
		  }
	  }
  }

function xmlreqPOST(url,data, responsefun, errorfun)
  {
	var pos;

	pos = xmlreqpos();
	if (xmlreqs[pos].xmlhttp)
	  {	xmlreqs[pos].inuse = 1;
		xmlreqs[pos].response = responsefun;
		xmlreqs[pos].error = errorfun;
		xmlreqs[pos].xmlhttp.open("POST",url,true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function()
		  {	if (typeof(xmlhttpChange) != 'undefined')
			  {	xmlhttpChange(pos);
			  }
		  }
		xmlreqs[pos].xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlreqs[pos].xmlhttp.send(data);
	  }
  }

function xmlhttpChange(pos)
  {
	var ret = 0;
	var xmldoc = null;

	if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].inuse == 1 && xmlreqs[pos].xmlhttp.readyState == 4)
	  {	if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304)
		  {	xmldoc = xmlreqs[pos].xmlhttp.responseXML.documentElement;
			if ( xmldoc != null )
			  {  	if ( xmlreqs[pos].response != null )
				  {	xmlreqs[pos].response(xmldoc);
				  }
				ret = 1;
			  }
		  }
		if ( ret == 0 && xmlreqs[pos].error != null )
		  {	xmlreqs[pos].error(xmlreqs[pos].xmlhttp.status, xmlreqs[pos].xmlhttp.responseText);
		  }
		xmlreqs[pos].inuse = 0;
	  }
  }
