/**
 *@author Sam McCallum <sam@palo-verde.us>
 */

/**
 * Mouseover highlights
 */
function navLinkOverHandler(ev) {
	this.parentNode.addClassName('hovering');
}

function navLinkOutHandler(ev) {
	this.parentNode.removeClassName('hovering');
}

function navLinkAggregator(el) {
	el.observe('mouseover',navLinkOverHandler.bind(el));
	el.observe('mouseout',navLinkOutHandler.bind(el));
}

$$('.topNavLink').each(navLinkAggregator);

/**
 * Drop down menus
 */

// Extend the dom

var DMenu = {
	showMenu: function (element) {
		var el = $(element);
		el.clearHide();
		el.show();
		return el;
	},
	
	hideMenu: function (element) {
		var el = $(element);
		var thisHide = el.hide.bind(el);
		el.timer = function () { thisHide(); }.delay(.1);
		return el;
	},
	
	clearHide: function (element) {
		var el = $(element);
		if (el.timer) {
			window.clearTimeout(el.timer);
			el.timer = null;
		}
		return el;
	}
};

Element.addMethods(DMenu);

// Attach to the nav menu items

function navDropDownOverHandler(ev) {
	var theMenu = $(this.parentNode.id+'_menu');
	if (!theMenu.navHandle) {
		theMenu.navHandle = this.parentNode;
	}
	theMenu.clonePosition(this,{setHeight: false,setWidth:false,offsetTop:17, offsetLeft: -5}).showMenu();
}

function navDropDownOutHandler(ev) {
	var theMenu = $(this.parentNode.id+'_menu');
	theMenu.hideMenu();
}

function navDropDownAggregator(el) {
	el.observe('mouseover',navDropDownOverHandler.bind(el));
	el.observe('mouseout',navDropDownOutHandler.bind(el));
}

$$('.withChildren').each(navDropDownAggregator);

// And this is the drop down menus

function navMenuOut(ev) {
	this.hideMenu();
	this.navHandle.removeClassName('hovering');
}

function navMenuOver(ev) {
	this.showMenu();
	this.navHandle.addClassName('hovering');
}

function navMenuDropDownAggregator(el) {
	el.observe('mouseover',navMenuOver.bind(el));
	el.observe('mouseout',navMenuOut.bind(el));
}

$$('.navDropDownMenu').each(navMenuDropDownAggregator);