function XHConn() {
	var xmlhttp = false;
	try
	{
		xmlhttp = new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				xmlhttp = false;
			}
		}
	}
	if (!xmlhttp)
	{
		return null;
	}

	this.connect = function( sURL, sMethod, sVars, fnDone )
	{
		if ( !xmlhttp )
		{
			return false;
		}
		var bComplete = false;
		sMethod = sMethod.toUpperCase();

		try
		{
			if ( sMethod == "GET" )
			{
				xmlhttp.open( sMethod, sURL + "?" + sVars, true );
				sVars = "";
			}
			else
			{
				xmlhttp.open( sMethod, sURL, true );
				xmlhttp.setRequestHeader( "Method", "POST "+sURL+" HTTP/1.1" );
				xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
			}
			xmlhttp.onreadystatechange = function()
			{
				if (xmlhttp.readyState == 4 && !bComplete)
				{
					bComplete = true;
					fnDone(xmlhttp);
				}
			};
			xmlhttp.send(sVars);
		}
		catch(z)
		{
			return false;
		}
		return true;
	};
	return this;
}
