var request = null;
var to = null;

var queue = new Array();

function Req(u, h) {
	this.url = u;
	this.handler = h;
}

function nextReq() {
	if (request != null) request = null;
	if (queue.length > 0) {
		var r = queue.shift();
		makeRequest(r.url, r.handler);
	}
}

function makeRequest(url, handler) {
    /*if (request != null) {
		request.abort();
		request = null;
	}*/
	
	if (request != null) {
		queue[queue.length] = new Req(url, handler);
		return;
	}
	
	if (window.XMLHttpRequest) request = new window.XMLHttpRequest();
	else if (window.ActiveXObject) {
		try {
			request = new window.ActiveXObject("Msxml2.XMLHTTP");
		} catch (E) {
			try {
				request = new window.ActiveXObject("Microsoft.XMLHTTP");
			} catch (EE) {
				
			}
		}
	}
	
	if (request == null) {
		alert("unable to create request object!");
		return;
	}
	
	try {
		if (handler != null) request.onreadystatechange = function() {
			var b = false;
			if (request.readyState == 4) {
				window.clearTimeout(to);
				b = true;
			}
			handler(); 
			if (b && queue.length > 0) window.setTimeout(nextReq, 100);
		};
		if (url.indexOf(".xml") == url.length -4 || url.indexOf(".xslt") == url.length - 5) {
			if (request.overrideMimeType) request.overrideMimeType("text/xml");
		}
		request.open("get", url, true);
		request.send(null);
        to = window.setTimeout("timeoutRequest(document.getElementById(null))", 120000);
    } catch (E) {
		
	}
}

function timeoutRequest(el) {
    if (request != null) {
        request.abort();    
        if (el) el.innerHTML = "<span class=\"errorText\">Unable to load content. Try refreshing the page.</span>";
        else {
            var loadingEl = null;
            var list = document.getElementsByTagName("div");
            if (list && list.length) {
                for (var i = 0; i < list.length; i++) {
                    if (list.item(i).className == "loading") {
                        loadingEl = list.item(i);
                        break;
                    }
                }
            }
            if (loadingEl) loadingEl.innerHTML = "<span style=\"color:#f00\">Unable to load content. Try refreshing the page.</span>";
        }
    }
}
