var req = null;
var ajax_func = null;

function AJAX(url, func) {
  ajax_func = func;
  if (window.XMLHttpRequest) { // Non-IE browsers
    req = new XMLHttpRequest();
    req.onreadystatechange = ajax_processStateChange;
    try {
      req.open("GET", url, true);
    } catch (e) {
      alert(e);
      return;
    }
    req.send(null);
  } else if (window.ActiveXObject) { // IE
    try {
      req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
    if (req) {
      req.onreadystatechange = ajax_processStateChange;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function ajax_processStateChange() {
  if (req.readyState == 4) { // Complete
    if (req.status == 200) { // OK response
//  alert("received:\n" + req.responseText);
      ajax_func(req.responseXML);
    } else {
      alert("Problem: " + req.status + "/" + req.statusText);
    }
  }
}

function AJAXRAW(url, func) {
  ajax_func = func;
  if (window.XMLHttpRequest) { // Non-IE browsers
    req = new XMLHttpRequest();
    req.onreadystatechange = ajax_processStateChangeRaw;
    try {
      req.open("GET", url, true);
    } catch (e) {
      alert(e);
      return;
    }
    req.send(null);
  } else if (window.ActiveXObject) { // IE
    try {
      req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
    if (req) {
      req.onreadystatechange = ajax_processStateChangeRaw;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function ajax_processStateChangeRaw() {
  if (req.readyState == 4) { // Complete
    if (req.status == 200) { // OK response
      ajax_func(req.responseText);
    } else {
      alert("Problem: " + req.status + "/" + req.statusText);
    }
  }
}
