function createRequest() {
  var request = null;
  try {
    request = new XMLHttpRequest();
  } catch (trymicrosoft) {
      try {
        request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (othermicrosoft) {
          try {
            request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (failed) {
              request = null;
          }
      }
  }
  if (request == null)
    return false;
  else return request;
}

function Pair(name, value) {
  this.name = name;
  this.value = value;
}

function phpRequest(method, url) {
  this.params = new Array();
  this.paramsIndex = 0;
  this.method = method;
  this.script = url;
  this.loading = 0;
  this.execute = phpRequestExecute;
  this.add = phpRequestAdd;
}

function phpRequestAdd(name, value) {
  this.params[this.paramsIndex] = new Pair(name, value);
  this.paramsIndex++;
}

function phpRequestExecute() {
  var targetURL = this.script;
  var httpRequest = createRequest();
  try {
    var query = "method="+this.method;
    for(var i in this.params) {
      query = query+'&'+this.params[i].name
                   +'='+encodeURIComponent(unescape(this.params[i].value));
    }
    switch(this.method) {
      case "GET":
        httpRequest.open("GET", targetURL+"?"+query, false, null, null);
        httpRequest.send(null);
      break;
      case "POST":
        httpRequest.open("POST", targetURL, false, null, null);
        httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        httpRequest.setRequestHeader("Content-Length", query.length);
        httpRequest.setRequestHeader("Connection", "close");
        httpRequest.send(query);
      break;
    }
  } catch (error) {
      alert('An error has occured calling the external site: '+error);
      return false;
  }
  switch(httpRequest.readyState) {
    case 1,2,3:
      alert('Bad Ready State: '+httpRequest.status);
      return false;
    break;
    case 4:
      if(httpRequest.status != 200) {
        alert('The server respond with a bad status code: '+httpRequest.status);
        return false;
      } else {
        var response = httpRequest.responseText;
      }
    break;
  }
  return response;
}
