//////////////////////////////////////////////////
// XMLHttp Functions/Objects
//////////////////////////////////////////////////

function getXMLHttp() {
  var XMLHttp;
  try {   
    XMLHttp = new XMLHttpRequest(); // firefox, opera, safari
  } catch(e) {
    try {
      XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); // ie 5.5+
    } catch(e) {
      try {
        XMLHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); // ie 6.0+
      } catch (e) {
        return false;
      }
    }
  }
  return XMLHttp;
}

/**
 * Post to a URL using XMLHttp object
 * @param url - The url to post to
 * @param queryString - Parameters to send to the url
 * @param callback - A callback object that must have at least one method: handleSuccess.
 *                   This method accepts the response XML and processes it accordingly
 * @param method - Override the send method (i.e. 'GET');
 */
function XMLHttpPost(url, queryString, callback, method) {
  var XMLHttp = getXMLHttp();
  url += queryString;
  if(!method) {
    method = 'POST';
  }
   XMLHttp.open(method, url, true);
      XMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      XMLHttp.onreadystatechange = function() {
        if (XMLHttp.readyState == 4) {
          callback.handleSuccess(XMLHttp.responseXML);
        }      
      }
   //XMLHttp.send(queryString);
   XMLHttp.send(null);
}

function XMLHttpGet(url, queryString, callback) {
  XMLHttpPost(url, queryString, callback, 'GET');
}

//////////////////////////////////////////////////
// Page dimension functions
//////////////////////////////////////////////////

function getScrollWidth() {
  var w = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
  return w ? w : 0;
}
function getScrollHeight() {
  var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
  return h ? h : 0;
}
function getDocWidth() {
  return (document.width !== undefined) ? document.width : document.body.offsetWidth;
}
function getDocHeight() {
  if (window.innerHeight && window.scrollMaxY) {  
    return window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
    return document.body.scrollHeight;
  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    return document.body.offsetHeight;
  }  
}
function getViewportWidth() {
  return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
}
function getViewportHeight() {
  return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
}

//////////////////////////////////////////////////
// Miscellaneous
//////////////////////////////////////////////////

/**
 * Use this function to indicate that the page is loading something
 */
function loading(state) {
  if(document.getElementById("page-loading") && !state) {
    document.body.removeChild(document.getElementById("page-loading"));
  } else if(state) {
    var layer = document.createElement("div");
    layer.id = "page-loading";
    layer.style.height = getDocHeight() + "px";
    layer.style.backgroundPosition = "center " + (((getViewportHeight()-100)/2) + getScrollHeight()) + "px";
    document.body.appendChild(layer);
  }
}
  
function deleteElement(element) {if(element) {var par = element.parentNode; par.removeChild(element);}}
function trim(str) { return str.replace(/^\s*|\s*$/g,""); }
