var menu;

document.observe("dom:loaded", function() {
  menu = new Menu('menu');
})

// helper method
function toggle_submenu(element) {
  element = $(element);
  menu.toggle_submenu(new Mainmenu(element.up()));
}

var Menu = Class.create({
  
  initialize: function(element) {
    this.element = $(element);
  },
  
  mainmenus: function() {;
    return this.element.select('li.mainmenu').map(function(e) {
      return new Mainmenu(e);
    });
  },
  
  current_mainmenu: function() {
    var current;
    this.mainmenus().each(function(mainmenu) {
      if (mainmenu.submenu().visible())
        current = mainmenu;
    });
    return current;
  },
  
  toggle_submenu: function(mainmenu) {
    
    if (!mainmenu.am_I_current()) {      
      if (this.current_mainmenu()) {
        this.current_mainmenu().submenu().hide();
      }
      mainmenu.submenu().show();
    }
  }
  
});

var Mainmenu = Class.create({
  
  initialize: function(element) {
    this.element = $(element);
  },
  
  submenu: function() {
    return this.element.next("li.submenu");
  },
  
  // am I the current main menu ?
  am_I_current: function() {
    if (menu.current_mainmenu()) {
      return (menu.current_mainmenu().element == this.element);
    } else {
      return false;
    }
  }
  
});