Menu = function(params)
{
  this.params = params || {}  
  this.elem = params.elem;
  this.menus = new Array();
  
  this.clases = {
    over : "over",
    oculta  : "oculto",
    menu: this.params.claseMenu || "menu",
    submenu: this.params.claseSubMenu || "submenu"
  }
  this.init();
}

Menu.prototype = {
  init: function(){
    this.getMenus();
    this.getSubMenus();
    this.asignaEventos();
  },
  getMenus: function(){
    var lis = this.elem.getElementsByTagName("li");
    for (var i = 0;i<lis.length;i++)
    {
       if(lis[i].className == this.clases.menu)
       {
         this.menus.push(lis[i]);
       }   
    }
  },
  getSubMenus: function()
  {
    for (var i = 0;i<this.menus.length;i++)
    {
      this.menus[i].submenu = this.menus[i].getElementsByTagName("div")[0];
    }
  },
  asignaEventos: function(){
    for (var i = 0;i<this.menus.length;i++)
    {
        var _self = this;
        this.menus[i].onmouseover = function(){ _self.eventOver(this)};
        this.menus[i].onmouseout = function(){  _self.eventOut(this)};
        if(this.menus[i].submenu)
        {
            var lis = this.menus[i].submenu.getElementsByTagName("li");
            for (var j = 0;j<lis.length;j++)
            {
                lis[j].onmouseover = function(){ _self.eventOver(this)};
                lis[j].onmouseout = function(){  _self.eventOut(this)};                
            }
        }
    }
  },
  eventOver: function(menu){
    menu.className += " " + this.clases.over;
    this.showSubMenu(menu);
  },
  eventOut: function(menu){
    var expresion = new RegExp(this.clases.over,"g");
    menu.className = menu.className.replace(expresion,"");  
    this.hideSubMenu(menu);  
  },  
  showSubMenu: function(menu)
  {
    if(menu.submenu)
    {
        var expresion = new RegExp(this.clases.oculta,"g");        
        menu.submenu.className = menu.submenu.className.replace(expresion,"");   
    }
  },
  hideSubMenu: function(menu)
  {
    if(menu.submenu)
    {
      menu.submenu.className += " " + this.clases.oculta;   
    }    
  } 
      
}
