/* ****************************************************************************
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.removeListener           = _removeEventListener;
  this.dispatch                 = _DispathEvent;
  this.showWidgets              = _showWidgets;
  this.hideWidgets              = _hideWidgets;
  
  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]];
        }
        if(oObj.widgets[i]){
          if(oObj.widgets[i].extend != undefined && oObj.widgets[i].extend != null){
            var aExtend = oObj.widgets[i].extend.split(",");
            for(var iExt = 0; iExt < aExtend.length; iExt++){
              var sExt = aExtend[iExt];
              var cExt = null;
              try{
                var cExt = eval(sExt);
                if(cExt){
                  oObj.widgets[i][sExt] = cExt;
                  oObj.widgets[i][sExt]();
                  if(oObj.widgets[i].init){
                    oObj.widgets[i].init();
                  }
                }
              }catch(e){
                alert("No se Pudo Extender " + i + ":" + sExt + " " + e.message);
              }
            } 
          }
        }        
      }          
      debugMessage("SetWidget " + self.name + ":" + i + ":" + oObj.names[i] + ":" + oObj.widgets[i]);
    }
    debugStopGroup();
  }
  
  function _removeEventListener(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();
    }
    var sPos = self.eventListeners[sEvent].contains(hFunction); 
    if(sPos > -1){
      self.eventListeners[sEvent].splice(sPos, 1);
    }
  }
  
  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;
  }
  
  function _hideWidgets(sWidgets){
    if(sWidgets == undefined || sWidgets == null){
      return;
    }
    var aWidgets = sWidgets.split(',');
    for(var iWidget = 0; iWidget < aWidgets.length; iWidget++){
      var sWidget = aWidgets[iWidget];
      var oWidget = self.widgets[sWidget];
      if(oWidget){
        oWidget.style.display = "none";
      } 
    }
  }
  
  function _showWidgets(sWidgets){
    if(sWidgets == undefined || sWidgets == null){
      return;
    }
    var aWidgets = sWidgets.split(',');
    for(var iWidget = 0; iWidget < aWidgets.length; iWidget++){
      var sWidget = aWidgets[iWidget];
      var oWidget = self.widgets[sWidget];
      if(oWidget){
        oWidget.style.display = "";
      } 
    }
  }
}

