function XHR(){
	var xmlhttp, bComplete = false;
	try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch(e){ try{ xmlhttp = new XMLHttpRequest(); }
	catch(e){ xmlhttp = false; } } }
	if(!xmlhttp)
		return null;
	this.connect = function(sURL, sMethod, sVars, fnDone){
		if (!xmlhttp)
			return false;
		bComplete = false;
		sMethod = sMethod.toUpperCase();
		try {
			if(sMethod == "GET"){
				xmlhttp.open(sMethod, sURL + "?" + sVars, true);
				sVars = null;
			}
			else{
				var headers = {
					"Content-Length": sVars.length,
					"Connection": "close",
					"Method": "POST " + sURL + " HTTP/1.1",
					"Content-Type": "application/x-www-form-urlencoded;charset=iso-8859-1"
				};
				xmlhttp.open(sMethod, sURL, true);
				for(var h in headers)
					xmlhttp.setRequestHeader(h, headers[h]);
			}
			xmlhttp.onreadystatechange = function(){
				if (xmlhttp.readyState == 4 && !bComplete){
					bComplete = true;
					fnDone(xmlhttp);
				}
			};
			xmlhttp.send(sVars);
		}
		catch(z){
			return false;
		}
		return true;
	};
	return this;
}