//
// This file contains basic ajax send and recieve request functions...
//

var requestURL = '/services/AjaxRequest.aspx';
var req;

//
// Send request
//
function sendRequest(requestType, requestData){
  var xmlStr = "";
  
  xmlStr = '<?xml version="1.0" encoding="ISO-8859-1"?>\r\n' +
           '<requests>\r\n';
           
  xmlStr += '  <request type="' + requestType + '" data="' + requestData + '">\r\n' +
            '  </request>\r\n';
                      
  xmlStr += '</requests>';
  
  //
  // Send Ajax request
  //
  sendXMLRequest(xmlStr);
  
  return false;
}

//
// Send raw request, should only be called from send request.
//
function sendXMLRequest(sendData) {
    req = false;

    //
    // Branch for native XMLHttpRequest object
    //
    if(window.XMLHttpRequest) {
      try {
        req = new XMLHttpRequest();
      } catch(e) {
        req = false;
      }
    //
    // Branch for IE/Windows ActiveX version
    //
    } else if(window.ActiveXObject) {
      try {
        req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
          req = false;
        }
      }
    }

    if(req) {
      //
      // Request object created successfully, so send request.
      //

      req.onreadystatechange = processResponse;
      req.open('POST', requestURL, true);
      // Specify that the body of the request contains form data
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

      req.send("xml=" + escape(sendData));
    } else {
      //
      // Failed to create request object, error!
      //
    }
  }

//
// Process response
//
function processResponse() {
    //
    // Only if req shows "loaded"
    //
    if (req.readyState == 4) {
      if (req.status == 200) {
        // ...processing statements go here...
        parseRequests(req.responseText);
      }
    }
  }

//
// Parse Requests
//
function parseRequests(xmlTxt){
  var lines = xmlTxt.split("\r\n");
  var state = 0;
  var jsStr = '';
  
  for (var i = 0; i < lines.length; i++){
    switch(state){
      case 0:  // Awaiting xml tag...
        if (lines[i].indexOf("<?xml") != -1){
          state = 1;
        }
        break;
      case 1:  // Awaiting responses tag...
        if (lines[i].indexOf("<responses>") != -1){
          state = 2;
        }
        break;
      case 2:  // Awaiting response tag or close responses tag...
        if (lines[i].indexOf("<response>") != -1){
          jsStr = '';
          state = 3;
        }
        if (lines[i].indexOf("</responses>") != -1){
          state = 4;
        }
        break;
      case 3:  // Awaiting close response tag...
        if (lines[i].indexOf("</response>") != -1){
          eval(jsStr);
          state = 2;
        } else {
          jsStr += lines[i];
        }
        break;
      case 4: // Finished
        break;
    }
  }
}