function sendAjaxRequest(httpMethod, url, content, sendToFunction)
{
  var requester;
  try
  {
    requester = new XMLHttpRequest();
  }
  catch (error)
  {
    try
    {
      requester = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (error)
    {
      requester = null;
    }
  }

  if (requester != null)
  {
		requester.onreadystatechange = function()
    {
			if (requester.readyState == 4)
      {
				if (requester.status == 200 || requester.status == 304)
        {
          success(requester,sendToFunction);
        }
        else
        {
          failure(requester,sendToFunction);
        }
      }

      return true;
    };
    requester.open(httpMethod, url, true);
    requester.send(content);
  }
  else
  {
    return false;
  }

  return true;
}

function success(requester,sendToFunction)
{
  sendToFunction(true, requester.responseXML);
  return true;
}

function failure(requester,sendToFunction)
{
  sendToFunction(false,"The XMLHttpRequest failed with status code: " + requester.status);
  return true;
}

// Synchronous Request
// Returns the dom
function sendJaxRequest(_m,_u){
var _r;
try{_r=new XMLHttpRequest();}
catch(error){try{_r=new ActiveXObject("Microsoft.XMLHTTP");}catch(error){_r=null;}}
if(_r){
_r.open(_m,_u,false);
_r.send(null);
var _x=_r.responseXML;
return _x;
}return null;}

// Scotts' ajax stacker scripts
var xmlreqs = new Array();

function CXMLReq(type, xmlhttp) {
  this.type = type;
  this.xmlhttp = xmlhttp;
}

function xmlreqGET(type, url) {
  var xmlhttp=false;
  if (window.XMLHttpRequest) { // Mozilla, etc.
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange = xmlhttpChange;
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
  } else if (window.ActiveXObject) { // IE
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    if (xmlhttp) {
      xmlhttp.onreadystatechange = xmlhttpChange;
      xmlhttp.open("GET",url,true);
      xmlhttp.send();
    }
  }
  var xmlreq = new CXMLReq(type, xmlhttp);
  xmlreqs.push(xmlreq);
}

function xmlreqPOST(url,data) {
  var xmlhttp=false;
  if (window.XMLHttpRequest) { // Mozilla etc.
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=xmlhttpChange;
    xmlhttp.open("POST",url,true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.send(data);
  } else if (window.ActiveXObject) { // IE
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    if (xmlhttp) {
      xmlhttp.onreadystatechange=xmlhttpChange;
      xmlhttp.open("POST",url,true);
      xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlhttp.send(data);
    }
  }
  var xmlreq = new CXMLReq('', xmlhttp);
  xmlreqs.push(xmlreq);
}

function xmlhttpChange(type) {
  if (typeof(window['xmlreqs']) == "undefined") return;
  for (var i=0; i < xmlreqs.length; i++) {
    if (xmlreqs[i].xmlhttp.readyState == 4) {
      if (xmlreqs[i].xmlhttp.status == 200 || xmlreqs[i].xmlhttp.status == 304) { // 200 OK
        response = xmlreqs[i].xmlhttp.responseXML;
        type = xmlreqs[i].type;
        xmlreqs.splice(i,1);
				handle_response(type, response);
        i--;
        
      } else { // error
        alert("The XMLHttpRequest failed with status code: " + xmlreqs[i].xmlhttp.status);
				xmlreqs.splice(i,1);
        i--;
      }
    }
  }
}
