

 /**
 * @author RainChen @ Mon Mar 12 22:56:02 CST 2007
 * @uses xajax file upload extend
 * @access public
 * @version 0.1
 */
 function xajax_extend()
 {
     if(typeof(xajax) == 'undefined')
     {
         return false;
     }
     xajax.isIE = (document.all && navigator.appVersion.toLowerCase().indexOf('msie')!=-1) || false;
     xajax.newSessionID = function()
     {
        var sessionID;
        sessionID = new String(new Date().getTime());
        var random = new String(Math.random( )).substr(2);
        sessionID = sessionID + random;
        return sessionID;
    };
     // overlay this if you need to
    xajax.setStatusMessages = function(msg)
    {
         window.status = msg;
    };
     // overlay this if you need to
      xajax.setCursor = function(cursor)
      {
          if (document.body)
              document.body.style.cursor = cursor;
      };
      var loadingTimeout;
      // overlay this if you need to
      xajax.beforeUpload = function()
      {
          // init status
      if(xajaxWaitCursor) xajax.setCursor('wait');
          if(xajaxStatusMessages) xajax.setStatusMessages('Sending Request...');
          clearTimeout(loadingTimeout);
          //loadingTimeout = setTimeout("xajax.loadingFunction();",400);
          loadingTimeout = setTimeout("xajax.loadingFunction();");
          if (xajaxDebug) xajax.DebugMessage("Starting xajax...");
      };
      xajax.upload = function(rpcFunc,formID,url)
      {
          var form = xajax.$(formID);
          if(!form)
          {
              return false;
          }
          if(form.encoding.toLowerCase() != 'multipart/form-data')
          {
              form.encoding = 'multipart/form-data';
          }
          if(form.method.toLowerCase() != 'post')
          {
              form.method = 'post';
          }
          var newSessionID = xajax.newSessionID();
          xajax.beforeUpload();
          if(!url)
          {
              url = xajaxRequestUri;
          }
          var separator = '?';
          if(url.indexOf('?') != -1)separator = '&';
          url += separator + 'xajax='+encodeURIComponent(rpcFunc);
          url += "&xajaxr=" + new Date().getTime();
          // get the upload file local path
          var formItem;
          var nodeName;
          for(var i=0; i<form.getElementsByTagName('input').length; i++)
          {
              formItem = form.elements[i];
              nodeName = new String(formItem.nodeName).toLowerCase();
              if(formItem.name == '' || nodeName == 'button')
              {
                  continue;
              }
              if(formItem.type == 'file')
              {
                  url += '&'+formItem.name+'='+encodeURIComponent(formItem.value);
              }
          }
          form.action = url;
          var iframeName = form.id + newSessionID;
          var iframe;
          if((iframe = xajax.$(iframeName)))
          {
              document.body.removeChild(iframe);
          }
          iframe = xajax.createIframe(iframeName,iframeName);
          form.target = iframeName;
          var xmlDoc;
          var responseXML;
          if(typeof iframe.onreadystatechange == 'object') // for IE
          {
              iframe.onreadystatechange = function()
              {
                  if(iframe.readyState == 'complete' && !iframe.loaded)
                  {
                      // IE load twice (bug or feature?)
                      iframe.loaded = true;
                      xmlDoc = document.frames(iframe.id);
                      if(xmlDoc.window.document.location != iframe.src)
                      {
                          responseXML = xmlDoc.window.document.XMLDocument;
                          xajax.uploadResponse(responseXML,iframe, xmlDoc);
                      }
                  }
              }
          }
          else // for FF
          {
              iframe.onload = function()
              {
                  xmlDoc = iframe.contentWindow;
                  if(xmlDoc.window.document.location != iframe.src)
                  {
                      responseXML = xmlDoc.document;
                      xajax.uploadResponse(responseXML,iframe, xmlDoc);
                  }
              }
          }
      };
      xajax.uploadResponse = function(responseXML,iframeObj, xmlDoc)
      {
          // response the xml
          var error=false;
          if(responseXML)
          {
              try
              {
                  xajax.processResponse(responseXML);
              }
              catch(e)
              {
                  error = true;
                  //xajax.DebugMessage(e.description);
              }
          }
          else
          {
              error = true;
          }
          if(error)
          {
            var responseText = new String(xmlDoc.document.body.innerHTML);
              xajax.uploadFalse(responseText);
          }
          else
          {
            xajax.uploadSuccess();
          }
          // remove the iframe after response
          //setTimeout(function(){document.body.removeChild(iframeObj)}, 500);
          setTimeout(function(){document.body.removeChild(iframeObj)});
      };
      // overlay this if you need to
      xajax.uploadFalse = function(responseText)
      {
      var errorString = "Error: the XML response that was returned from the server is invalid.";
          errorString += "\nReceived:\n" + responseText;
          var trimmedResponseText = responseText.replace( /^\s+/g, "" );// strip leading space
          trimmedResponseText = trimmedResponseText.replace( /\s+$/g, "" );// strip trailing
          if (trimmedResponseText != responseText)
              errorString += "\nYou have whitespace in your response.";
          xajax.DebugMessage(errorString);
          xajax.setCursor('default');
          if (xajaxStatusMessages == true) xajax.setStatusMessages('Invalid XML response error');
      };
      // overlay this if you need to
      xajax.uploadSuccess = function()
      {
      xajax.setCursor('default');
      };
      xajax.createIframe = function(name,id)
      {
          var iframe;
          if(!id)
          {
              id = '';
          }
          if(xajax.isIE) // for IE
          {
              iframe = document.createElement('<iframe id="'+id+'" name="'+name+'">');
          }
          else // for FF
          {
              iframe = document.createElement('iframe');
              iframe.id = id;
              iframe.name = name;
          }
          iframe.width = '0';
          iframe.height = '0';
          iframe.style.display = 'none';
          iframe.scrolling = 'no';
          iframe.src = 'about:blank';
          document.body.appendChild(iframe);
          return iframe;
      };
      return true;
  }
  xajax_extend();
