// This file is provided for backward compatibility with Rico 1.1.
 
// It is not used by any other module in Rico 2.x. Furthermore, it is 
 
// recommended that you call Prototype's AJAX functions directly
 
// instead of using these functions. It will likely be removed in a
 
// future release.
 
 
Rico.AjaxEngine = Class.create(); 
 
Rico.AjaxEngine.prototype = { 
 
   initialize: function() { 
      this.ajaxElements = new Array(); 
      this.ajaxObjects  = new Array(); 
      this.requestURLS  = new Array(); 
      this.options = {}; 
   }, 
 
   registerAjaxElement: function( anId, anElement ) { 
      if ( !anElement ) 
         anElement = $(anId); 
      this.ajaxElements[anId] = anElement; 
   }, 
 
   registerAjaxObject: function( anId, anObject ) { 
      this.ajaxObjects[anId] = anObject; 
   }, 
 
   registerRequest: function (requestLogicalName, requestURL) { 
      this.requestURLS[requestLogicalName] = requestURL; 
   }, 
 
   sendRequest: function(requestName, options) { 
      // Allow for backwards Compatibility 
      if ( arguments.length >= 2 ) 
       if (typeof arguments[1] == 'string') 
         options = {parameters: this._createQueryString(arguments, 1)}; 
      this.sendRequestWithData(requestName, null, options); 
   }, 
 
   sendRequestWithData: function(requestName, xmlDocument, options) { 
      var requestURL = this.requestURLS[requestName]; 
      if ( requestURL == null ) 
         return; 
 
      // Allow for backwards Compatibility 
      if ( arguments.length >= 3 ) 
        if (typeof arguments[2] == 'string') 
          options.parameters = this._createQueryString(arguments, 2); 
 
      new Ajax.Request(requestURL, this._requestOptions(options,xmlDocument)); 
   }, 
 
   sendRequestAndUpdate: function(requestName,container,options) { 
      // Allow for backwards Compatibility 
      if ( arguments.length >= 3 ) 
        if (typeof arguments[2] == 'string') 
          options.parameters = this._createQueryString(arguments, 2); 
 
      this.sendRequestWithDataAndUpdate(requestName, null, container, options); 
   }, 
 
   sendRequestWithDataAndUpdate: function(requestName,xmlDocument,container,options) { 
      var requestURL = this.requestURLS[requestName]; 
      if ( requestURL == null ) 
         return; 
 
      // Allow for backwards Compatibility 
      if ( arguments.length >= 4 ) 
        if (typeof arguments[3] == 'string') 
          options.parameters = this._createQueryString(arguments, 3); 
 
      var updaterOptions = this._requestOptions(options,xmlDocument); 
 
      new Ajax.Updater(container, requestURL, updaterOptions); 
   }, 
 
   // Private -- not part of intended engine API -------------------------------------------------------------------- 
 
   _requestOptions: function(options,xmlDoc) { 
      var requestHeaders = ['X-Rico-Version', Rico.Version ]; 
      var sendMethod = 'post'; 
      if ( xmlDoc == null ) 
        if (Rico.prototypeVersion < 1.4) 
        requestHeaders.push( 'Content-type', 'text/xml' ); 
      else 
          sendMethod = 'get'; 
      (!options) ? options = {} : ''; 
 
      if (!options._RicoOptionsProcessed){ 
      // Check and keep any user onComplete functions 
        if (options.onComplete) 
             options.onRicoComplete = options.onComplete; 
        // Fix onComplete 
        if (options.overrideOnComplete) 
          options.onComplete = options.overrideOnComplete; 
        else 
          options.onComplete = this._onRequestComplete.bind(this); 
        options._RicoOptionsProcessed = true; 
      } 
 
     // Set the default options and extend with any user options 
     this.options = { 
                     requestHeaders: requestHeaders, 
                     parameters:     options.parameters, 
                     postBody:       xmlDoc, 
                     method:         sendMethod, 
                     onComplete:     options.onComplete 
                    }; 
     // Set any user options: 
     Object.extend(this.options, options); 
     return this.options; 
   }, 
 
   _createQueryString: function( theArgs, offset ) { 
      var queryString = "" 
      for ( var i = offset ; i < theArgs.length ; i++ ) { 
          if ( i != offset ) 
            queryString += "&"; 
 
          var anArg = theArgs[i]; 
 
          if ( anArg.name != undefined && anArg.value != undefined ) { 
            queryString += anArg.name +  "=" + escape(anArg.value); 
          } 
          else { 
             var ePos  = anArg.indexOf('='); 
             var argName  = anArg.substring( 0, ePos ); 
             var argValue = anArg.substring( ePos + 1 ); 
             queryString += argName + "=" + escape(argValue); 
          } 
      } 
      return queryString; 
   }, 
 
   _onRequestComplete : function(request) { 
      if(!request) 
          return; 
      // User can set an onFailure option - which will be called by prototype 
      if (request.status != 200) 
        return; 
 
      var response = request.responseXML.getElementsByTagName("ajax-response"); 
      if (response == null || response.length != 1) 
         return; 
      this._processAjaxResponse( response[0].childNodes ); 
       
      // Check if user has set a onComplete function 
      var onRicoComplete = this.options.onRicoComplete; 
      if (onRicoComplete != null) 
          onRicoComplete(); 
   }, 
 
   _processAjaxResponse: function( xmlResponseElements ) { 
      for ( var i = 0 ; i < xmlResponseElements.length ; i++ ) { 
         var responseElement = xmlResponseElements[i]; 
 
         // only process nodes of type element..... 
         if ( responseElement.nodeType != 1 ) 
            continue; 
 
         var responseType = responseElement.getAttribute("type"); 
         var responseId   = responseElement.getAttribute("id"); 
 
         if ( responseType == "object" ) 
            this._processAjaxObjectUpdate( this.ajaxObjects[ responseId ], responseElement ); 
         else if ( responseType == "element" ) 
            this._processAjaxElementUpdate( this.ajaxElements[ responseId ], responseElement ); 
         else 
            alert('unrecognized AjaxResponse type : ' + responseType ); 
      } 
   }, 
 
   _processAjaxObjectUpdate: function( ajaxObject, responseElement ) { 
      ajaxObject.ajaxUpdate( responseElement ); 
   }, 
 
   _processAjaxElementUpdate: function( ajaxElement, responseElement ) { 
      ajaxElement.innerHTML = RicoUtil.getContentAsString(responseElement); 
   } 
 
} 
 
var ajaxEngine = new Rico.AjaxEngine(); 
 
 |