var Menu = Class.create(
{
	delay: 1.5,

	initialize: function()
	{
		this.dochoverCB = this.dochover.bind(this);
	},

	parse: function()
	{
		(this.container = $('menuContainer')) && this.container.select('ul.depth0 > li[id]').each(this.handler, this);
	},

	handler: function(element)
	{
		if (element.submenu = element.down(2))
		{
			element.expanded = false;

			element.hasClassName('active') && (this.item_prev = element) && this.toggle(this.item_prev, true);

			element.observe('mouseover', this.hover.bind(this, element));
		}
	},

	hover: function(element)
	{
		if (element.expanded)
		{
			this.item_next = null;
		}
		else
		{
			this.item_next = element;

			var appear = (function() { if (this.item_next) { this.item_prev && this.toggle(this.item_prev); this.item_now && this.toggle(this.item_now); this.item_now = this.item_next; this.item_next = null; this.toggle(this.item_now, true); } }).bind(this);

			this.item_now ? appear.delay(this.delay) : appear();

			document.stopObserving('mouseover', this.dochoverCB);
			document.observe('mouseover', this.dochoverCB);
		}
	},

	dochover: function(event)
	{
		if (event.findElement() != this.container && !event.findElement().descendantOf(this.container))
		{
			this.item_now && this.toggle(this.item_now);

			this.item_now = this.item_next = null;

			this.item_prev && this.toggle(this.item_prev, true);

			document.stopObserving('mouseover', this.dochoverCB);
		}
	},

	toggle: function(element, show)
	{
		(element.expanded = show) ? element.submenu.removeClassName('depth1') : element.submenu.addClassName('depth1');
	}
});

var menu = new Menu();

document.observe('dom:loaded', function(event) { menu.parse(); });
