//XML Request handling :: allows for multiple HTTPRequests :: written by shane.houstein@dtpha.tas.gov.au
//Each request is assigned a callback function - which is called when the 
//request has been loaded and is fed the completed request object as a paramater called 'req'

function XMLRequest(XmlHttpObj,CallBackFunc,ErrorFunc) {
    this.XmlHttp = XmlHttpObj;
    this.callBack = CallBackFunc;
    this.error = ErrorFunc;
}

XMLRequest.reqs = new Array();

function issueXmlRequest(url,callBackFunc,ErrorFunc) {
	// branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        var req = new XMLHttpRequest();
        XMLRequest.reqs.push(new XMLRequest(req,callBackFunc,ErrorFunc));
        req.onreadystatechange = onXML;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        var req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            XMLRequest.reqs.push(new XMLRequest(req,callBackFunc,ErrorFunc));
            req.onreadystatechange = onXML;
            req.open("GET", url, true);
            req.send(null);
        }
    }    
}

function onXML() {
	for (var i=0; i < XMLRequest.reqs.length; i++) {
		if (XMLRequest.reqs[i].XmlHttp.readyState == 4) {
			if (XMLRequest.reqs[i].XmlHttp.status == 200 || XMLRequest.reqs[i].XmlHttp.status == 304) {
				// 200 OK
				var cb = XMLRequest.reqs[i].callBack;
				var xh = XMLRequest.reqs[i].XmlHttp;
				XMLRequest.reqs.splice(i,1); 
				i=i-1;
				cb(xh);
			} else {
				// error
				var cb = XMLRequest.reqs[i].error;
				var xh = XMLRequest.reqs[i].XmlHttp;
				XMLRequest.reqs.splice(i,1); 
				i=i-1;
				cb(xh);
			}
		}
	}
}