if (Object.isUndefined(MLHC)) { var MLHC = function() { }; }

MLHC.NavigationMenu = Class.create({
	initialize: function(element) {
		this.element = $(element);
		this.timeoutIds = $H();

		var self = this;

		var onShow = function(event) {
			var timeoutIds = self.timeoutIds.get(this.identify());
			self.timeoutIds.set(this.identify(), []);

			timeoutIds.each(function(timeoutId) {
				clearTimeout(timeoutId);
			});

			this.down("a").addClassName("active");
			this.down(".menu").style.display = "block";
		};
		var onHide = function(event) {
			var timeoutId = setTimeout(function() {
				this.down("a").removeClassName("active");
				this.down(".menu").hide();
			}.bind(this), MLHC.NavigationMenu.DELAY);

			var timeoutIds = self.timeoutIds.get(this.identify());
			timeoutIds.push(timeoutId);

			self.timeoutIds.set(this.identify(), timeoutIds);
		};

		this.element.down("ul").childElements().each(function(listItemElement) {
			if (listItemElement.down(".menu") != null) {
				self.timeoutIds.set(listItemElement.identify(), []);

				listItemElement.observe("mouseenter", onShow)
					.observe("mouseleave", onHide);
			}
		});
	}
});
MLHC.NavigationMenu.DELAY = 400;