/* ****************************************************************************
Copyright 2007,
Todos los derechos Reservados
CM.COM E.U.
cmhenao@epm.met.co

El uso sin solicitud espresa a la compañia de esta libreria es una clara
violación a la propiedad intelectual y los derechos de autor.
Prohibida su distribucion y/o uso sin el permiso explicito de cm.com
**************************************************************************** */

/* ****************************************************************************
Autor: Jhon Alejandro Ramirez Velez
       Desarrollador
       Progress - WebSpeed
       jhalrave@epm.net.co
**************************************************************************** */

function cObject(){
  var self                      = this;
  
  this.createWidgetsFromNames   = _createWidgetsFromNames;
  this.addListener              = _addEventListener;
  this.dispatch                 = _DispathEvent;
  
  function _createWidgetsFromNames(oObj, bReload){
    debugStartGroup("Creating widgets for " + this.name);
    if(oObj == undefined || oObj == null){
      var oObj = self;      
    }
    if(bReload == undefined || bReload == null){
      var bReload = false;
    }
  
    for(var i in oObj.names){
      if(oObj.names[i] instanceof Array){continue;}
      if(oObj.names[i] instanceof Object){continue;}
      if(oObj.names[i] instanceof Function){continue;}
      if(oObj.widgets[i] == null || bReload){
        oObj.widgets[i] = document.getElementById(oObj.names[i]);
        if(oObj.widgets[i] == null){
          oObj.widgets[i] = document.forms[oObj.names[i]];
        }
      }          
      debugMessage("SetWidget " + self.name + ":" + i + ":" + oObj.names[i] + ":" + oObj.widgets[i]);
    }
    debugStopGroup();
  }
  
  function _addEventListener(sEvent, hFunction){
    if(self.eventListeners == undefined || self.eventListeners == null){
      self.eventListeners = new Object();
    }
    if(self.eventListeners[sEvent] == undefined || self.eventListeners[sEvent] == null){
      self.eventListeners[sEvent] = new Array();
    }
    if(self.eventListeners[sEvent].contains(hFunction) > -1){
      return;
    }
    debugMessage("Adding listener for " + sEvent);
    self.eventListeners[sEvent].push(hFunction);
  }
  
  function _DispathEvent(oEvent){
    var sEvent = oEvent.name;
    debugStartGroup("Event Dispatch from: " + self.name + ": " + sEvent);
    if(self.eventListeners != undefined && self.eventListeners != null){
      if(self.eventListeners[sEvent] != undefined && self.eventListeners[sEvent] != null){
        for(var i = 0; i < self.eventListeners[sEvent].length; i++){        
          debugMessage("Dispatching event " + sEvent);
          var bResult = self.eventListeners[sEvent][i](oEvent);
          if(bResult != undefined)
            if(bResult == false || bResult == null){
              debugMessage("Event Cancelado " + sEvent);
              debugStopGroup();
              return false;
            }
        }
      }
    }
    debugStopGroup();
    return true;
  }
  
}

