// p9_rpc.js

 /*
  * p9 RPC client v0.5.5
  *
  * RPC client javascript for p9
  * Mark Warner
  *
  * 08/07/06 - v0.0.1
  */

  /*
   * Revision History
   * -----------------------------
   * Date        Revision    Description
   * ----------- ----------- -------------------------------------------------------------------------------
   * 08/07/06    0.0.1       Initial Creation
   * 08/10/06    0.1.0       Various bug fixes and updates
   * 08/11/06    0.1.1       Added handling for title updates
   * 08/16/06    0.2.0       Added sndRPC_interactive and buildURL
   * 08/17/06    0.2.1       Added request counter to discourage caching
   * 08/30/06    0.5.0       Almost total rewrite.  Removed queueRPC and updated handleResponse to accept actual XML
   *             0.5.1       Incremented version number in an attempt to stop Firefox from !@#%@ caching
   *             0.5.2       Added some debug code
   *             0.5.3       Fixed a dumb bug
   *             0.5.4       Commented debug code
   *             0.5.5       Added 'XML' protocol switch to BuildURL()
   *
   *
   */
   
   /* deprecated var req_queue = new Array(); */
   var req_counter = 0;

   function createRequestObject() {
     var ro;
     if (window.XMLHttpRequest) {
       ro = new XMLHttpRequest();
     }else{
       ro = new ActiveXObject("Microsoft.XMLHTTP");
     }
     
     return ro;
   }

   var rpc = createRequestObject();
   
   function sndRPC_interactive(url, callback) {
     // send an RPC request immediately (in response to GUI interaction)
     // this function can also be used when a specified callback is desired
     var request = createRequestObject();
     
     //alert('Sending \'' + url + '\'');
     
     request.open('get', url);
     request.onreadystatechange = function () { if (request.readyState == 4) { callback(request.responseXML); } }
     request.send(null);
   }
   
   function buildURL(base) {
     // 'base' is the location of the RPC script on the server
     // name/value pairs are constructed from the subsequent arguments in the form 'name', 'value', 'name', 'value', ...
     var qParams = '';
     
     req_counter++;
     
     for (i = 1;i < buildURL.arguments.length;i = i + 2) {
       if (i == 1) {
         qParams = buildURL.arguments[i] + '=' + buildURL.arguments[i+1];
       }else{
         qParams = qParams + '&' + buildURL.arguments[i] + '=' + buildURL.arguments[i+1];
       }
     }
     var url = base + '?' + qParams + '&protocol=XML&req=' + req_counter + '.' + Math.random();
     return url;
   }
   
   /* deprecated
   function sndRPC() {
     if (req_queue.length == 0 || (rpc.readyState != 0 && rpc.readyState != 4)) {
       return 1;
     }
     req_counter++;

     var req_url = req_queue.pop();
     req_url = req_url + '&req=' + req_counter + '.' + Math.random();

     rpc.open('get', req_url);
     rpc.onreadystatechange = handleResponse;
     rpc.send(null);
   }
   */

   /* deprecated
   function handleResponse() {
     if(rpc.readyState == 4) {
       var response = rpc.responseXML.documentElement;

       var updates = response.getElementsByTagName('update');
       var len = updates.length;
       for(i = 0; i < len; i++) {
         var update = updates[i];

         var element = update.getElementsByTagName('element')[0].childNodes[0].nodeValue;
         var content = update.getElementsByTagName('content')[0].childNodes[0].nodeValue;

         document.getElementById(element).innerHTML = content;
       }
     }
   }
   */

