function createXMLHttpRequest() {
  if (window.XMLHttpRequest) {
     return new XMLHttpRequest();
  }
  try {
     return new ActiveXObject("MSXML2.XMLHTTP");
  } catch(e) {
     try {
        return new ActiveXObject("Microsoft.XMLHTTP");
     } catch(f) {
        return null;
     }
  }
}

function URLReader(url) {
  this.url = url;
  this.complete = false;
  this.req = createXMLHttpRequest();
  if (this.req == null) {
     throw new Error("Cannot create XMLHttpRequest");
  }

  this.req.open("GET", this.url, false); // sync IO
}

URLReader.prototype.read = function(frm) {
  this.req.send(null);
  if (this.req.status == 200 && this.req.readyState == 4) {
     this.complete = true;
  } else {
     this.complete = false;
     throw new Error("Cannot read from ***" + this.url + "***");
  }
}

URLReader.prototype.getText = function() {
  if (this.complete) {
    var text = this.req.responseText;
    if (navigator.appVersion.indexOf("KHTML") > -1) {
      var esc = escape(text);
      if (esc.indexOf("%u") < 0 && esc.indexOf("%") > -1) {
        text = decodeURIComponent(esc);
      }
    }
    return text;
     return this.req.responseText;
  } else {
     return null;
  }
}

URLReader.prototype.getXML = function() {
  if (this.complete) {
     return this.req.responseXML;
  } else {
     return null;
  }
}

