var req;
var elementToUpdateGlobal;
var originalDivContentGlobal;
var loadingDivGlobal;
var chainedJSGlobal;

function ajaxUpdate(url,elementToUpdate,loadingDiv,chainedJS) {
  if ( loadingDiv ) {
    if ( loadingDiv != elementToUpdate ) {
      loadingDivGlobal = loadingDiv;
      originalDivContentGlobal = document.getElementById(loadingDiv).innerHTML;
    }
    document.getElementById(loadingDiv).innerHTML = "<img src='/images/loading.gif' width='17' height='5'>";
  }else {
    loadingDivGlobal = false;
    originalDivContentGlobal = false;
  }
  if ( chainedJS ) {
    chainedJSGlobal = chainedJS;
  }else {
    chainedJSGlobal = false;
  }
  elementToUpdateGlobal = elementToUpdate;  
  ajaxPOST(url);
}

function ajaxGet(url) {
  if(window.XMLHttpRequest) {
    req = new XMLHttpRequest(); 
  } else if(window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  req.open("GET", url, true);
  req.onreadystatechange = ajaxCallback;
  req.send(null);
}
function ajaxPOST(url) {
  if(window.XMLHttpRequest) {
    req = new XMLHttpRequest(); 
  } else if(window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  var urlArray = url.split("?");
  var url = urlArray[0];
  var params = urlArray[1];
  req.open("POST", url, true);
  req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
  req.send(params);
  req.onreadystatechange = ajaxCallback;
}
function ajaxCallback() {
  if(req.readyState == 4) {
    if(req.status == 200) {
      handleResponse(req.responseText);
    } else {
      alert("There was a problem retrieving the data:\n" + req.statusText);
    }
  }
}
function handleResponse(response) {
  document.getElementById(elementToUpdateGlobal).innerHTML = response;
  if ( originalDivContentGlobal && document.getElementById(loadingDivGlobal) ) {
    document.getElementById(loadingDivGlobal).innerHTML = originalDivContentGlobal;
    originalDivContentGlobal = false;
  }
  if ( chainedJSGlobal ) {
    eval(chainedJSGlobal);
  }
  chainedJSGlobal = "";
}