var globalresponsefunction = '';
var globalextraparameter = null;
var responsetext = '';
var xmlDocument = null;
var requestpending = false;
var waitingurls = new Array();
var waitingresponsefunctions = new Array();
var waitingextraparameters = new Array();

//onerror = errorHandle;

function errorHandle(error){
	alert('Error: ' + error);
}

try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
	try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (E) {
		xmlhttp = false;
	}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
 	try {
		xmlhttp = new XMLHttpRequest();
	} catch (e) {
		xmlhttp=false;
	}
}
if (!xmlhttp && window.createRequest) {
	try {
		xmlhttp = window.createRequest();
	} catch (e) {
		xmlhttp=false;
	}
}

function createXMLobj(text){
	if (window.ActiveXObject)
	{
		xmlDocument=new ActiveXObject("Microsoft.XMLDOM");
		xmlDocument.async="false";
		xmlDocument.loadXML(text);
	} else {
		var parser=new DOMParser();
		xmlDocument=parser.parseFromString(text,"text/xml");
	}
}

function sendrequest(url, responsefunction, extraparameter){
	if (!requestpending) {
		globalresponsefunction = responsefunction;
		globalextraparameter = extraparameter;
		requestpending = true;
		xmlhttp.open("GET", url, true);
		xmlhttp.onreadystatechange = getresponse;
		xmlhttp.send(null);
	}else{
		waitingextraparameters.push(extraparameter);
		waitingresponsefunctions.push(responsefunction);
		waitingurls.push(url);
	}
}

function getresponse() {
	if (xmlhttp.readyState==4) {
		if (xmlhttp.status != 200) {
			errorHandle('The server returned an error page.');
		}
		responsetext = xmlhttp.responseText;
		try {
			eval(globalresponsefunction + "(responsetext, globalextraparameter)");
		} catch (err) {
			errorHandle('Evaluating the response function (' + globalresponsefunction + ') caused an error: ' + err);
		} 
		globalresponsefunction = '';
		globalextraparameter = '';
		requestpending = false;

		if(waitingurls.length != 0){
			sendrequest(waitingurls.shift(), waitingresponsefunctions.shift(), waitingglobalextraparameters.shift())
		}
	}
}

function getfirstnodevalue(node){
	try{
		if(node.childNodes.length){
			return node.childNodes[0].nodeValue;
		} else {
			return '';
		}
	} catch (e) {
		return '';
	}
}
