function XHConn()
{
  var xmlhttp;
  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;

  var bComplete = false;
  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 = '';
      } 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;
}
