/* ****************************************************************************
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.
**************************************************************************** */

/* ****************************************************************************
Autor: Jhon Alejandro Ramirez Velez
       Desarrollador
       Progress - WebSpeed
       jhalrave@une.net.co - jhalrave@gmail.com
**************************************************************************** */

function cMenuBar(){
  var self = this;
  
  this.cObject = cObject;
  this.cObject();
  
  this.currentItem = null;
  /* Contiene el array con los objetos de los cuales se formaran los items */
  this.items       = null;
  
  this.main        = self;
  this.timers      = [];
  
  this.Items       = [];
  /* Indica si el menu esta visible o no */
  this.state       = false;
  
  this.display     = _display;
  this.clear       = _clear;
  this.close       = _close;
  
  function _display(){
    self.clear();
    if(self.tagName != undefined){
      switch(self.tagName){
        case "TABLE":
          for(var iMenus = 0;iMenus < self.items.length; iMenus++ ){
            var oItem = self.items[iMenus];
            oItem.idx = iMenus;
            var oMenuItem = new cItem();
            oMenuItem.item = oItem;
            oMenuItem.tag = "TABLE";
            oMenuItem.menu = self;
            self.Items.push(oMenuItem);
            var oMenu = oMenuItem.create();
            var oRow  = self.insertRow();
            var oCont = oRow.insertCell();
            self.timers = new Array();
            oCont.id = "menu_" + iMenus;
            oCont.className = "menu"; 
            oCont.appendChild(oMenu);
            oRow = null;
            oCont = null;   
            oMenu = null;          
          }   
        break;
        case "TR":
          for(var iMenus = 0;iMenus < self.items.length; iMenus++ ){
            var oItem = self.items[iMenus];
            oItem.idx = iMenus;
            var oMenuItem = new cItem();
            oMenuItem.item = oItem;
            oMenuItem.tag = "TABLE";
            oMenuItem.menu = self;
            self.Items.push(oMenuItem);
            var oMenu = oMenuItem.create();
            var oCont = self.insertCell(self.cells.length);
            self.timers = new Array();
            oCont.id = "menu_" + iMenus;
            oCont.className = "menu"; 
            oCont.appendChild(oMenu);
            oCont = null;   
            oMenu = null;          
          }   
        break;
        default:
          for(var iMenus = 0;iMenus < self.items.length; iMenus++ ){
            var oItem = self.items[iMenus];
            oItem.idx = iMenus;
            var oMenuItem = new cItem();
            oMenuItem.item = oItem;
            oMenuItem.tag = "DIV";
            oMenuItem.menu = self;
            self.Items.push(oMenuItem);
            var oMenu = oMenuItem.create();
            self.timers = new Array();
            self.appendChild(oMenu);            
            oMenu = null;          
          }
        break;
      }    
    }
  }

  function _clear(){
    if(self.tagName != undefined && self.tagName != null){
      switch(self.tagName){
        case "TR":
          for(var iMenus = self.cells.length - 1;iMenus >= 0; iMenus--){
            self.deleteCell(iMenus);
          }
        break;
        default:
          for(var iMenus = self.children.length - 1;iMenus >= 0; iMenus--){
            self.removeChild(self.children(iMenus));
          }
        break;
      }
    }
  }
  
  function _close(){
    for(var iItem = 0; iItem < self.Items.length; iItem++){
      var oItem = self.Items[iItem];
      oItem.close(); 
    }
  }
  
}

function cItem(){
  
  var self = this;
  
  this.submenu = null;
  this.label   = null;
  this.item    = null;  
  this.tag     = "DIV";
  this.menu    = null;
  
  this.create  = _create;
  this.close   = _close;
  
  function _create(){
    if(self.item == null){return};
    
    switch(self.tag){
      case "TABLE":
        var oItem = document.createElement('TABLE');
        oItem.border = "0";
        var oTr = oItem.insertRow(oItem.rows.length);
        
        var oBulletTd = oTr.insertCell(oTr.cells.length);
        
        oBullet = document.createElement('IMG');
        oBullet.src = "baseline/images/bullet00.gif";
        oBulletTd.appendChild(oBullet);
        
        var oLabelTd = oTr.insertCell(oTr.cells.length);
        oLabelTd.className = "menu_label";
        oLabelTd.innerHTML = self.item.menu_label;
        
        oLabelTd.attachEvent('onmouseover', _open);
        oLabelTd.attachEvent('onmouseout', _out); 
        oLabelTd.attachEvent('onclick', _itemclick);
       
        self.label = oLabelTd;
        oLabelTd.item = self;
            
        oTr = null;
        oBulletTd = null;
        oBullet = null;
        oLabelTd = null;
        return oItem;
      break;
      default:
        var oLabel = document.createElement('DIV');
        oLabel.className = "menu_item";
        oLabel.innerHTML = self.item.menu_label;
        oLabel.attachEvent('onmouseover', _open);
        oLabel.attachEvent('onmouseout', _out); 
        oLabel.attachEvent('onclick', _itemclick);
        self.label = oLabel;
        oLabel.item = self;
        return oLabel;
      
      break;
    }
  
  }
  
  function _itemclick(){
    var oLabel = window.event.srcElement; 
    var oEvent = {};
    oEvent.name = "menu_selection";
    oEvent.object = oLabel.item.item;
    self.menu.main.dispatch(oEvent);
  }
  
  
  function _open(){
    var oTd = window.event.srcElement;
    oTd.className = oTd.className + "_over";
    var oItem = oTd.item; 
    var oMain = oItem.menu.main;
    for(;oMain.timers.length > 0;){
      window.clearTimeout(oMain.timers[oMain.timers.length - 1]);
      oMain.timers.pop();
    }         
    if(oTd.initializated == undefined){
      if(oItem.item.submenus != undefined && oItem.item.submenus.length > 0){
        var oDiv = document.createElement('DIV');
        oDiv.className = "menu_holder";
        oDiv.style.display = "block";        
        oDiv.cMenuBar = cMenuBar;
        oDiv.cMenuBar();
        oDiv.main = oItem.menu.main;
        oDiv.items = oItem.item.submenus;
        oItem.submenus = oDiv; 
        oDiv.display();        
        document.body.appendChild(oDiv);
        oTd.initializated = true;                
      }
    }
    oItem.menu.close();
    if(oItem.submenus != null){
      var oSubmenu = oItem.submenus;
      var oLabel = oItem.label;
      oSubmenu.style.position = "absolute";
      oSubmenu.style.top = getOffSetTop(oLabel) + parseInt(oLabel.offsetHeight - 2);
      oSubmenu.style.left = getOffSetLeft(oLabel) + parseInt(oLabel.offsetWidth * 1 / 4);
      var oIdxParent = 0;
      oSubmenu.style.display = "block";    
    }
  }
  
  function _out(){
    var oTd = window.event.srcElement;
    oTd.className = oTd.className.replace('_over', '');
    oTd.item.menu.main.timers.push(window.setTimeout("app.widgets['menubar'].close();",750));
  }
  
  function _close(){
    if(self.submenus != null){     
      self.submenus.close();
      self.submenus.style.display = "none";      
    }
  }
  
}

