var Navbar = Class.create({
	initialize: function(id, options) {
		this.navbar = $(id);
		
		this.options = Object.extend({
		    triggerSelector: 'ul#triggers > li',
		    flyoutSelector: 'div.nav_flyout'
		}, options || {});
	
		this.registerEventHandlers();
	},
	registerEventHandlers: function() {
        var triggers = this.navbar.select(this.options.triggerSelector).findAll(function(trigger) {
		    return (trigger.select(this.options.flyoutSelector).length > 0);
        }, this);
        
        var navbar = this;
        
        triggers.each(function(trigger) {
            trigger.observe('mouseenter', function() {
				if (!!navbar.timer) { // If timer exists, cancel it and show immediately
					clearTimeout(navbar.timer);
					navbar.timer = null;
					if (typeof activeTrigger != 'undefined' && !!activeTrigger) {
						activeTrigger.removeClassName('hover');
					}
					activeTrigger = this;
					activeTrigger.addClassName('hover');
				} else { // If timer does not exist, create one
					navbar.timer = setTimeout(function() {                
						navbar.timer = null;
						activeTrigger = this;
						activeTrigger.addClassName('hover');
					}.bind(this), 200);
				}
			}).observe('mouseleave', function(e) {  
				if (isIE && e.toElement == null) { // The way to detect if it's a COM element is if e.toElement == null
					return false; // Do nothing
				}
				if (!!navbar.timer) { // When leaving a trigger, cancel the timer if it exists
					clearTimeout(navbar.timer);
					navbar.timer = null;
					if (typeof activeTrigger != 'undefined') {
						activeTrigger.removeClassName('hover');
					}
				} else { // Otherwise create a new timer which nullifies itself after the delay
					navbar.timer = setTimeout(function() {
						navbar.timer = null;
						if (typeof activeTrigger != 'undefined') {
							activeTrigger.removeClassName('hover');
						}
					}.bind(this), 600);
				}                  
			});
        });
        
	}
});  				    
			    
// Sample instantiation:
//
// new Navbar('nav-secondary', {triggerSelector: '.trigger', flyoutSelector: '.flyout'});
