function AjaxBase() {

this.ajax = {
  'charset': 'iso-8859-1',
  'header': {},
  'url': ''};


/** 
 * Called where req.readyState == 4. Use req.responseText, req.status, req.getResponseHeader(), ...
 */
this.ajaxDone = function(req) {
  throw 'implement ajaxDone(req)';
}


/**
 * Execute ajax call. Implement ajaxDone().
 */
this.ajaxCall = function(url) {

  if (!url) {
    throw 'Empty url';
  }

  this.ajax.url = url;
  var page_request = false;

  if (window.ActiveXObject) {
    // IE Shit
    if (window.location.protocol !== "file:") {
      try {
        page_request = new window.XMLHttpRequest();
      } 
      catch(e) {
        try {
          page_request = new window.ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {}
      }
    }
  }

  if (!page_request) {
    try {
      page_request = new XMLHttpRequest();
    }
    catch(e) {
      throw "Failed to create XMLHttpRequest";
    }
  }
  
  try {
    if (this.ajax.charset && page_request.overrideMimeType) {
      page_request.overrideMimeType('text/html;charset=' + this.ajax.charset);
    }

    for (i in this.ajax.header) {
      page_request.setRequestHeader(i, this.ajax.header[i]);
    }
  }
  catch(e) {
    throw "Failed to configure page_request";
  }

  var me = this;
  page_request.onreadystatechange = function() { 
    if (page_request.readyState == 4) { 
      me.ajaxDone(page_request); 
    }
  }

  page_request.open('GET', url, true);
  page_request.send(null);
}


}

