/**
 * Menu class
 */
Menu = {

	/**
	 * Array of menu items
	 */
	_menuItems: new Array(),

	/**
	 * Initializes the menu.
	 */
	init: function()
	{
		Menu._menuItems = Element.getElementsBySelector($("menu"), "li");
		for (var i = 0; i < Menu._menuItems.length; i++)
		{
			/* only allow direct child nodes */
			if (Menu._menuItems[i].parentNode != $("menu"))
			{
				continue;
			}

			/* if the link matches the current URL, item should be expanded */
			if (Menu._menuItems[i].childNodes[0].href != undefined && Menu._menuItems[i].childNodes[0].href == window.location.href)
			{
				Element.addClassName(Menu._menuItems[i], "expanded");
			}
			else
			{
				/* if one of the subitems links match the current URL, parent item should be expanded */
				var subItems = Element.getElementsBySelector(Menu._menuItems[i], "li")
				for (var s = 0; s < subItems.length; s++)
				{
					if (subItems[s].childNodes[0].href != undefined && subItems[s].childNodes[0].href == window.location.href)
					{
						Element.addClassName(subItems[s], "active");
						Element.addClassName(Menu._menuItems[i], "expanded");
					}
				}
			}

			/* if active, item has expanded class... */
			if (!Element.hasClassName(Menu._menuItems[i], "expanded"))
			{
				Menu.collapse(Menu._menuItems[i]);
			}

			Element.observe(Menu._menuItems[i], "click", Menu.handleClick.bind(Menu._menuItems[i]));
		}
	}, // function init

	/**
	 * Handles the onclick event.
	 */
	handleClick: function(e)
	{
		/* if already open, just close */
		if (Element.hasClassName(this, "expanded"))
		{
			Menu.collapse(this);
		}
		else
		{
			/* make sure all items are collapsed */
			for (var i = 0; i < Menu._menuItems.length; i++)
			{
				Menu.collapse(Menu._menuItems[i]);
			}

			/* expand current item */
			Menu.expand(this);
		}
	}, // function handleClick

	/**
	 * Expands the menu item.
	 */
	expand: function(item)
	{
		/* add active/expanded style */
		Element.addClassName(item, "expanded");

		/* show possible submenu */
		var subMenu = Element.getElementsBySelector(item, "div");
		if (subMenu.length == 1)
		{
			Effect.SlideDown(subMenu[0], { "duration": 0.2 });
		}
	}, // function expand

	/**
	 * Collapses the menu item.
	 */
	collapse: function(item)
	{
		/* remove active/expanded style */
		Element.removeClassName(item, "expanded");

		/* hide possible submenu */
		var subMenu = Element.getElementsBySelector(item, "div");
		if (subMenu.length == 1)
		{
			Element.hide(subMenu[0]);
		}
	} // function collapse

}; // class Menu

/* Initialise menu on load */
Element.observe(window, "load", Menu.init);