function HttpRequest() {
  var httpRequest=null;
  try{
    httpRequest=new XMLHttpRequest();
    //if(httpRequest.overrideMimeType)httpRequest.overrideMimeType('text/xml');
  }catch(e){
    try{httpRequest=new ActiveXObject("Msxml2.XMLHTTP");}
    catch(e){
      try{httpRequest=new ActiveXObject("Microsoft.XMLHTTP");}
      catch(e){alert('Unable to create HttpRequest.');}
    }
  }
  this.getRequest=function(){
    return httpRequest;
  }
  this.getXml=function(method,url,callback,data){
    return getResponse(method,url,callback,data,true);
  }
  this.getText=function(method,url,callback,data){
    return getResponse(method,url,callback,data,false);
  }
  function getResponse(method,url,callback,data,isXml){
    var response=null;
    var isAsync=(callback==null)?false:true;
    if(httpRequest==null){
      if(isAsync){callback(null);}else{return null;}
    }
    method=method.toUpperCase()
    httpRequest.onreadystatechange=processResponse;
    httpRequest.open(method,url,isAsync);
    if(method=='POST'){
      httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      httpRequest.setRequestHeader('Content-length',data.length);
      httpRequest.setRequestHeader('Connection','close');
      httpRequest.send(data);
    }else{
      httpRequest.send(null);
    }
    function processResponse(){
      if(httpRequest.readyState != 4)return;
      if(httpRequest.status==200)response=(isXml)?httpRequest.responseXML:httpRequest.responseText;
      if(isAsync)callback(response,httpRequest.status);
    }
    return response;
  }
}

