/*******************************************************************************
*              Classe per la gestione eventi - Cross-Browser                   *         
*******************************************************************************/

(function() {

/*******************************************************************************
  [UTILITY REQUIRED]  
*******************************************************************************/
function toArray( pseudoArray ) 
{
   var result = [];
   for (var i = 0; i < pseudoArray.length; i++) result.push(pseudoArray[i]);
   return result;
}

Function.prototype.bindEventListener = function (object) 
{
   var method = this;
   var oldArguments = toArray(arguments).slice(1);
   return function (event) {
       return method.apply(object, [event || window.event].concat(oldArguments));
   };
}
/*******************************************************************************
  [END UTILITY REQUIRED]  
*******************************************************************************/

/*******************************************************************************
  [JEVENT OBJECT]  
*******************************************************************************/
JEvent = function()
{  
  // Metodo per l'aggiunta di un listener
  this.add = function(obj, evType, funct, useCapture)
  {
    try
    { 
      obj.addEventListener(evType, funct, useCapture);                                                                                                      
      return true;
    }
    catch(e)
    {
      try
      {
        obj.attachEvent("on" + evType, funct);
        return true;
      }
      catch(e)
      {
        return false;
      }
    }
    
  }
  
  // Metodo per la rimozioni di un listener
  this.remove = function(obj, evType, funct, useCapture)
  {   
    try
    {
      obj.removeEventListener(evType, funct, useCapture);
      return true;
    }
    catch(e)
    {
      try
      {
        obj.detachEvent("on" + evType, funct);
        return true;
      }
      catch(e)
      {
        return false;
      }
    }
  }
  
  // Metodo per lanciare un evento 
  this.fire = function (obj, evType)
  {
    try{
        obj.fireEvent("on"+evType);
    }
    catch(e)
    {
      var fireEvent = window.document.createEvent("UIEvent");   // KeyEvent  e MouseEvent sono sottoclassi
      fireEvent.initEvent(evType, false, true);                 // ci sono anche altre funzioni da capire il funzionamento: false -> bubbling true -> canceleable
      obj.dispatchEvent(fireEvent);
    }
  }    
}
/*******************************************************************************
  [END JEVENT OBJECT]  
*******************************************************************************/
})();





