﻿DropMenu = {};

DropMenu.Init = function(root) {
	var linkContainers = $(root).getElements(".linkContainer");
	var mainMenuWidth = $("mainMenu").getWidth();

	for (var i = 0; i < linkContainers.length; i++) {
		var linkContainer = linkContainers[i];


		linkContainer.SubMenu = null;
		var subMenus = linkContainer.getChildren(".subMenu");

		// Determine the level of the item.

		var parentNode = linkContainer.getParent(".linkContainer");

		linkContainer.Level = 0;
		linkContainer.RootParent = parentNode;

		while (parentNode != null) {
			linkContainer.Level++;
			parentNode = parentNode.getParent(".linkContainer");

			if (parentNode != null) {
				linkContainer.RootParent = parentNode;
			}
		}

		if (subMenus.length > 0) {
			linkContainer.SubMenu = subMenus[0];

			// If the sub menu would go over the end of the page where it lives,
			// make it flip to the left.
			
				var parent = (linkContainer.Level > 0 ? linkContainer.RootParent : linkContainer);

				var position = parent.getPosition($("mainMenu"));
				var subMenuWidth = 0;

				parent.SubMenu.setStyle("visibility", "hidden");
				parent.SubMenu.setStyle("display", "block");
				subMenuWidth = parent.SubMenu.getWidth();
				parent.SubMenu.setStyle("display", null);
				parent.SubMenu.setStyle("visibility", null);

				var totalWidth = position.x + subMenuWidth;

				if (linkContainer.Level > 0) {
					totalWidth += linkContainer.Level * subMenuWidth;
				}

				if (totalWidth > mainMenuWidth) {
					linkContainer.addClass("flipLeft");
				}

			var counter = new Element("SPAN");
			counter.addClass("counter");

			counter.inject(linkContainer, "top");
		}

		linkContainer.addEvent("mouseover", function() { DropMenu.LinkOver(this); });
		linkContainer.addEvent("mouseout", function() { DropMenu.LinkOut(this); });
	}
}

DropMenu.LinkOver = function(link) {
	link = $(link);
	link.IsActive = true;
	
	DropMenu.ShowSubMenu(link.SubMenu);

	link.addClass("overLink");
}

DropMenu.ShowSubMenu = function(subMenu) {
	if (subMenu) {
		subMenu.IsActive = true;
		subMenu.addClass("activeSubMenu");
	}
}

DropMenu.LinkOut = function(link) {
	link = $(link);
	link.IsActive = false;

	DropMenu.HideSubMenu(link.SubMenu);

	var timeout = null;
	function delay() {
		if (!link.IsActive) {
			link.removeClass("overLink");
		}

		clearTimeout(timeout);
	}

	timeout = setTimeout(delay, 10);
}

DropMenu.HideSubMenu = function(subMenu) {
	if (subMenu) {
		var timeout = null;
		subMenu.IsActive = false;

		function delay() {
			if (!subMenu.IsActive) {
				subMenu.removeClass("activeSubMenu");
			}

			clearTimeout(timeout);
		}

		timeout = setTimeout(delay, 10);
	}
}