function crtReq() {
	try { r = new XMLHttpRequest(); 
	} catch(err1) {
		try { r = new ActiveXObject("Msxml12.XMLHTTP");
		} catch(err2) {
			try { r = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(err3) {
				r = false;
			}
		}
	}
	return r;
}

function reqGET(url,qry,r) {
	nR = parseInt(Math.random()*99999999);
	r.open("GET",url+'?'+qry+'&rand='+nR,true);
	r.send(" ");
}

function reqGETnr(url,qry,r) {
	r.open("GET",url+'?'+qry,true);
	r.send(" ");
}

function reqPOST(url,qry,r) {
	r.open("POST",url,true);
	r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	r.send(qry);
}

function doCallback(callback,item) {
	eval(callback+'(item)');
}

function xAjax(url,qry,callback,reqtype,getxml) {
	var nR = crtReq();
	
	nR.onreadystatechange = function() {
		if (nR.readyState==4) {
			if (nR.status==200) {
				var item = nR.responseText;
				if (getxml==1) {
					item = nR.responseXML;
				}
				doCallback(callback, item);
			}
		}
	}
	
	if (reqtype=='post') {
		reqPOST(url,qry,nR);
	} else {
		if (reqtype=='getnr') {
			reqGETnr(url,qry,nR);
		} else {
			reqGET(url,qry,nR);
		}
	}
}
// Functions for synchronized xmlhttprequest
function reqSGET(url,qry,r) {
	nR = parseInt(Math.random()*99999999);
	r.open("GET",url+'?'+qry+'&rand='+nR,false);
	r.send(" ");
}

function reqSGETnr(url,qry,r) {
	r.open("GET",url+'?'+qry,false);
	r.send(" ");
}

function reqSPOST(url,qry,r) {
	r.open("POST",url,false);
	r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	r.send(qry);
}
function xSAjax(url,qry,reqtype,getxml) {
	var nR = crtReq();
	
	if (reqtype=='post') {
		reqSPOST(url,qry,nR);
	} else {
		if (reqtype=='getnr') {
			reqSGETnr(url,qry,nR);
		} else {
			reqSGET(url,qry,nR);
		}
	}
//	alert(""+nR.readyState+"*"+nR.status+"*"+nR.responseText);
	if (nR.readyState==4) {
		if (nR.status==200) {
			var item = nR.responseText;
			if (getxml==1) {
				item = nR.responseXML;
			}
			return item;
		}
	}
	return;
}

