var req;
var xmlRequests = new Array();
var xmlDocuments= new Array();
var waitingForResponse = 0;

function AddXmlRequest(url, xmlToPost) {
	xmlRequests[xmlRequests.length] = url;
	xmlDocuments[xmlDocuments.length] = xmlToPost;
	
	SendXMLRequest();
}

function SendXMLRequest()
{
	if ((xmlRequests.length >= 1) && (waitingForResponse <= 0))
	{
		waitingForResponse++;
		
		var xmlRequest = xmlRequests[0];
		var xmlDocument = xmlDocuments[0];
		
		xmlRequests.splice(0, 1);
		xmlDocuments.splice(0, 1);
		loadXMLDoc(xmlRequest, xmlDocument);
	}
}

function loadXMLDoc(url, xmlToPost) {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = processReqChange;
		if (xmlToPost==null){
			req.open("GET", url, true);
			req.send("");
		}else{
			req.open("POST", url, true);
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			req.send("xml="+xmlToPost);
		}		
	}
}
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            processXML(req.responseXML);
            
        } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
        }
        waitingForResponse--;
        SendXMLRequest();
    }
}