/*
Required Files: 
	prototype.js
	scriptaculous.js?load=effects
*/
;
var Menu = {

	Transitions : { },

	init : function() {
	
		var menus = $$('#header ul.menu');

		menus.each(function(n) {
			new Menu.Menu(n);
		});
	}
}

Menu.Transitions.NONE = function( open) {

}

Menu.Menu = Class.create({

	initialize : function(menu) {
	
		this.menu = menu;

		// append behavior to children
		var menu_items = menu.select("li");
		
		menu_items.each(function(n) {
		
			var submenu = n.select("ul");
			
			if (submenu.length > 0) {
				n.addClassName("has_children");
			}

			n.observe('mouseover', function() {
				this.activateMenuItem(n);
				this.openSubmenu(n.down('ul'));
			}.bind(this));
			n.observe('mouseout', function(e) {
				// emulate onmouseleave behavior that is only available in IE
				if (!e) var e = window.event;

				var relatedTarget = (e.relatedTarget) ? e.relatedTarget : e.toElement;
				
				try { // try/catch block is here because firefox puts <div class="anonymous-div"> inside inputs
				
					while (relatedTarget && relatedTarget != n && relatedTarget.nodeName != 'BODY') {
						relatedTarget = relatedTarget.parentNode
					}
					if (relatedTarget == n) return;
				} catch (err) {
					
				}

				// execute function body if the mouse has actually left the listitem
				document.body.focus();
			
			
				this.deactivateMenuItem(n);
				this.closeSubmenu(n.down('ul'));
			}.bind(this));
		}.bind(this));
	},

	activateMenuItem : function(menuitem) {
		if (!menuitem) { return; }
		
		menuitem.addClassName('highlighted');
	},
	
	deactivateMenuItem : function(menuitem) {
		if (!menuitem) { return; }
		
		menuitem.removeClassName('highlighted');
	},
	
	openSubmenu : function(submenu) {
		if (!submenu) { return; }
		
		submenu.addClassName("open");
	},

	closeSubmenu : function(submenu) {
		if (!submenu) { return; }

		submenu.removeClassName("open");
	}

});

document.observe("dom:loaded", Menu.init);