var ifiMenu = Class.create({ initialize: function(ul, options) { this.options = Object.extend({ subnav: 'subnav' }, options || {}); $A(ul.childElements()).each(function(li) { if (li.tagName == 'LI') { li.isIn = false; li.observe('mouseover', this.activateMenu.bind(this, li)); li.observe('mouseout', this.deactivateMenu.bind(this, li)); } }.bind(this)) }, activateMenu: function(el) { clearTimeout(el.outTimeout); if (!el.isIn) { el.addClassName('active'); } el.isIn = true; }, deactivateMenu: function(el) { el.outTimeout = setTimeout(function() { this.deactivateMenu2(el); }.bind(this), 300); }, deactivateMenu2: function(el) { el.removeClassName('active'); el.isIn = false; } }); Event.observe(window, 'load', function() { var nav = new ifiMenu($('mainnav'), { subnav: '.subnav' }); });