        function URLEncode(thedata)
        {
          // The Javascript escape and unescape functions do not correspond
          // with what browsers actually do...
          var SAFECHARS = "0123456789" +                  // Numeric
                          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +  // Alphabetic
                          "abcdefghijklmnopqrstuvwxyz" +
                          "-_.!~*'()";                    // RFC2396 Mark characters
          var HEX = "0123456789ABCDEF";

          var plaintext = thedata;
          var encoded = "";
          for (var i = 0; i < plaintext.length; i++ ) 
          {
            var ch = plaintext.charAt(i);
            if (ch == " ") 
            {
              encoded += "+";  // x-www-urlencoded, rather than %20
            } 
            else 
            {
              if (SAFECHARS.indexOf(ch) != -1) 
              {
                encoded += ch;
              } 
              else 
              {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) 
                {
                  alert( "Unicode Character '" +
                       ch +
                       "' cannot be encoded using standard URL encoding.\n" +
                       "(URL encoding only supports 8-bit characters.)\n" +
                       "A space (+) will be substituted." );
                  encoded += "+";
                } 
                else 
                {
                  encoded += "%";
                  encoded += HEX.charAt((charCode >> 4) & 0xF);
                  encoded += HEX.charAt(charCode & 0xF);
                }
              }
            }
          } // for
          return encoded;
        };


        var AjaxRequest = null;
        function SendAjaxRequest(type, args, CallbackFunction, secure)
        {
          if (AjaxRequest == null)
          {
            AjaxRequest = null;

            // code for Mozilla, etc.
            if (window.XMLHttpRequest)
            {
              AjaxRequest=new XMLHttpRequest();
            }
            // code for IE
            else if (window.ActiveXObject)
            {
              AjaxRequest=new ActiveXObject("Microsoft.XMLHTTP");
            }
            if (AjaxRequest==null) 
            {
              alert("Ajax attempt failed");
              return true; // can't do ajax
            }
          }
        
          var now = new Date();
          var currentTime = '' +  now.getTime();
          var url = rootServer;
          if (secure) url = rootSecureServer;
          url += "/SheerPower/ajax?type="+type + "&args=" + URLEncode(args);
          AjaxRequest.open("GET", url, true);
          AjaxRequest.onreadystatechange = 
            function()
            {
              if (AjaxRequest.readyState == 4 && 
                  AjaxRequest.status == 200) 
              {
                if (AjaxRequest.responseText)
                {
                  CallbackFunction(AjaxRequest.responseText);
                }
              }
            };
          AjaxRequest.send(null);
        }
