// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
var Menu = Class.create();
Menu.prototype = {
  initialize: function(menu_id) {
    this.menu = $(menu_id)
    this.submenus = new Array();
    var submenus =  new Selector('.submenu').findElements(this.menu);
    submenus.each(function(submenu) {
      this.initializeSubmenu(submenu);
    }.bind(this));
  },
  initializeSubmenu: function(submenu) {
    var submenu = $(submenu);
    submenu.hide();
    submenu.menuItem = $(submenu.parentNode);
    new Selector('li').findElements(submenu)[0].addClassName('firstChild');
    submenu.menuItem.menuLink = new Selector('a').findElements(submenu.menuItem)[0];
    submenu.menuItem.menuLink.submenu = submenu;
    submenu.menuItem.menuLink.observe('mouseover', this.hover.bindAsEventListener(this));
    submenu.observe('mouseover', this.clearTimer.bind(this));
    submenu.menuItem.observe('mouseout', this.hide.bind(this));
    this.submenus.push(submenu);
  },
  clearTimer: function() {
    clearTimeout(this.timer);
  },
  hover: function(evt) {
    this.clearTimer();
    var submenu = Event.element(evt).submenu;
    this.hideAll();
    this.show(submenu);
    Event.stop(evt);
    return false;
  },
  show: function(submenu) {
    Position.absolutize(submenu);
    Position.clone(submenu.menuItem.menuLink, submenu, {
      setHeight: false,
      setWidth: false, 
      offsetTop: submenu.menuItem.offsetHeight
    });
    submenu.menuItem.menuLink.addClassName('hover');
    submenu.show();
  },
  hide: function(submenu) {
    this.timer = setTimeout(this.hideAll.bind(this), 250);
  },
  hideAll: function() {
    this.submenus.each(function(submenu) {
      submenu.menuItem.menuLink.removeClassName('hover');
      submenu.hide();
    });
  }
}