PyroApplicationClass = new Class({

  /* flag per attivare le funzioni di debuggin bella console di firebug */
  DEBUG: true,

  /* valore del tag base */
  baseUrl: $('PYRO_APP_BASE_URL').href,

  /* metodo per recuperare i proxy javascript dei moduli pyro */
  getModuleProxy: function (moduleId) {
    var req = new Request({
      url: $('PYRO_APP_BASE_URL').href + '/jsproxies.php/' + moduleId,
      evalResponse: true,
      async: false
    });
    req.send();
    return new PyroApplicationClass[moduleId]();
  },

  getModuleActionRequest: function(module, actionname, options){
    this.module = module;
    this.action = actionname;
    options = $extend({
      url: this.baseUrl + '/ajax.php/'+module+'/'+actionname,
      async: true,
      update: false,
      json: false,
      onFailure: this.errorFromRequest.bind(this),
      onRequest: this.loaderNotifierStart,
      onComplete: this.loaderNotifierStop
    }, options);
    var req;
    if (options.update) req = new Request.HTML(options);
    else if (options.json) {
      options.url = this.baseUrl + '/jsons.php/'+module+'/'+actionname;
      if ($type(options.json) == 'object'){
        options.async = false;
        options.onSuccess = function(jsonobj, jsontxt){ $extend(options.json, jsonobj); }
        req = new Request.JSON(options);
      }
      else req = new Request.JSON(options);
    }
    else req = new Request(options);
    this.currentrequest = req;
    return req;
  },

  errorFromRequest: function(xhr){
    if ($('pyro_request_error')){
      $('pyro_request_error').innerHTML = xhr.responseText;
    }
    this.debug('errore richiesta: ' + this.module + '->' + this.action);
  },

  loaderNotifierStart: function(){
    $(document.body).setStyle('cursor', 'wait');
  },

  loaderNotifierStop: function(){
    $(document.body).setStyle('cursor', 'default');
  },

  /* funzione di debug */
  debug: function(msg){
    if (console && this.DEBUG) {
      console.debug(msg)
    }
  }

});

var PyroApplication = new PyroApplicationClass();

