function xmlRequest(){
  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;}
    }
  }
  var me = this;
  if (!xmlhttp) return null;
  this.aSync = true;
  this.connect = function(sURL, sMethod, sVars, fnDone, fnDoneVar1, fnDoneVar2, fnDoneVar3, fnDoneVar4){
    if (!xmlhttp) return false;
    sMethod = sMethod.toUpperCase();
    try {
      if (sMethod == "GET"){
	xmlhttp.open(sMethod, sURL+(sVars?"?"+sVars:''), this.aSync);
	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;
	  if(fnDone)fnDone(xmlhttp, fnDoneVar1, fnDoneVar2, fnDoneVar3, fnDoneVar4);
	  fnDoneVar1 = null;
	  fnDoneVar2 = null;
	  fnDoneVar3 = null;
	  fnDoneVar4 = null;
	}
      };
      xmlhttp.send(sVars);
    }
    catch(z) {
      return alert(z); 
    };
    return true;
  };
  return this;
};