// Utilities for handling ajax-related calls

// Make an ajax post request to the specified URL.
// url: The server URL to send the request to
// parameters: The parameters to send to the server (maybe encoded by encodePost()?)
// callback: The javascript callback function to invoke on completion
function ajaxPostRequest(url, parameters, callback) {
   http_request = false;
   if (window.XMLHttpRequest) { // Mozilla, Safari
      http_request = new XMLHttpRequest();
      if (http_request.overrrideMimeType) {
         http_request.overrideMimeType('text/html');
      }
   } else if (window.ActiveXObject) { // IE
      try {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
      }
   }
   if (!http_request) {
      alert("Please use a newer web browser to access this application.");
      return false;
   }

   http_request.onreadystatechange = callback;
   http_request.open('POST', url, true);
   http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   http_request.setRequestHeader("Content-length", parameters.length);
   http_request.setRequestHeader("Connection", "close");
   http_request.send(parameters);
}

/**
 * Synchronous ajax get request
 * @param url String URL of the request, including any parameters
 */
function sjaxGetRequest(url) {
   if (window.XMLHttpRequest) {              
      AJAX=new XMLHttpRequest();              
   } else {                                  
      AJAX=new ActiveXObject("Microsoft.XMLHTTP");
   }
   if (AJAX) {
      AJAX.open("GET", url, false);                             
      AJAX.send(null);
      return AJAX.responseText;
   } else {
      return false;
   }
}

// Encode the contents of a Form object into a POST string
// This is useful for submitting a form via AJAX.
// obj: Form object
function encodePostParams(obj) {
   var postStr = "";
   for (i=0; i < obj.elements.length; i++) {
      if (obj.elements[i].tagName == "INPUT") {
         switch(obj.elements[i].type) {
            case "text":
               postStr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
               break;
            case "checkbox":
               if (obj.elements[i].checked) {
                  postStr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
               } else {
                  postStr += obj.elements[i].name + "=&";
               }
               break;
            case "radio":
               if (obj.elements[i].checked) {
                  postStr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
               }
               break;
         }
      }
      if (obj.elements[i].tagName == "SELECT") {
         var sel = obj.elements[i];
         // Iterate over the select options and add any which are selected to the post string
         for (var j=0; j < sel.options.length; j++) {
            if (sel.options[j].selected) {
               postStr += sel.name + "=" + sel.options[j].value + "&";
            }
         }
      }
   }
   return postStr;
}