/**
 * Class for the drop down menu.
 */
Menu = {

	/* hold the hide timer */
	_hideTimeout: null,

	/* will hold the active A element */
	_activeLink: null,

	/* will hold the active UL element */
	_activeSubMenu: null,

	/* time in milliseconds before hiding the submenu */
	_hidePause: 1000,

	/**
	 * Sets the time to wait before hiding the sub menu.
	 *
	 * @param int secs
	 */
	setHidePause: function(secs)
	{
		Menu._hidePause = secs * 1000;
	},

	/**
	 * Initialises the drop down menu.
	 *
	 * Should be called on page load.
	 */
	init: function()
	{
		var elements = Element.getElementsBySelector($("menu"), "li");
		for (var i = 0; i < elements.length; i++)
		{
			if (Element.getElementsBySelector(elements[i], "ul").length > 0)
			{
				var a = Element.getElementsBySelector(elements[i], "a")[0];
				Element.observe(elements[i], 'mouseover', Menu._showSubMenu.bind(elements[i]));
				Element.observe(elements[i], 'mouseout', Menu._hideSubMenu.bind(elements[i]));

				Element.addClassName(a, "submenu");
			}
			else
			{
				Element.observe(elements[i], "mouseover", Menu._quickHideSubMenu);
			}
		}
	},

	/**
	 * Shows the sub menu.
	 */
	_showSubMenu: function(e)
	{
		var a = Element.getElementsBySelector(this, "a")[0];
		var subMenu = Element.getElementsBySelector(this, "ul")[0];

		/* hide previous opened sub menu */
		Menu._quickHideSubMenu();

		/* keep hover style as long as opened */
		Element.addClassName(a, "menu_open");

		/* show sub menu */
		Element.setStyle(subMenu, {"visibility": "visible"});

		/* set correct position */
		var pos = Position.positionedOffset(this);
		subMenu.style.left = pos[0] + "px";
		 
		if(subMenu.hasClassName('last'))
		{
			subMenu.style.display = 'block';
			subMenu.style.left = pos[0] -10 + "px";
		}
		
		subMenu.style.top = (pos[1] + a.getHeight()) + "px";

		/* save sub menu */
		Menu._activeLink = a;
		Menu._activeSubMenu = subMenu;
	},

	/**
	 * Immediatly hides the active menu.
	 */
	_quickHideSubMenu: function()
	{
		/* clear possible timeout */
		if (Menu._hideTimeout)
		{
			window.clearTimeout(Menu._hideTimeout);
		}
		/* remove hover style */
		if (Menu._activeLink)
		{
			Element.removeClassName(Menu._activeLink, "menu_open");
		}
		/* hide sub menu */
		if (Menu._activeSubMenu)
		{
			Element.setStyle(Menu._activeSubMenu, {"visibility": "hidden"});
		}
	},

	/**
	 * Method for hiding the submenu, takes
	 */
	_hideSubMenu: function()
	{
		var a = Element.getElementsBySelector(this, "a")[0];
		var subMenu = Element.getElementsBySelector(this, "ul")[0];

		/* hide in x second */
		Menu._hideTimeout = window.setTimeout(function() { Element.removeClassName(a, "menu_open"); Element.setStyle(subMenu, {"visibility": "hidden"}); }, Menu._hidePause);
	}
};

/* Set time before the menu closes */
Menu.setHidePause(0.5);

/* Initialise menu on load */
document.observe('dom:loaded', Menu.init);
//Element.observe(window, "load", Menu.init);
