/**
 * Site menu
 *
 * Shows a neat box on the screen with info.
 *
 * Version: 1.0
 */
function SiteMenu(activeMenu)
{
	this.element = window.document.getElementById('siteMenu');
	this.menuItems = [];
	this.activeMenu = activeMenu;
	this.menuActive = false;
	this.menuItemTimeout = null;
	this.menuTimeout = null;

	this.init();
}

Object.extend(SiteMenu.prototype,
{
	init: function()
	{
		if (this.element)
		{
			var menuItems = this.element.getElementsByTagName('li'), menuItem, x = 0;
			
			while (menuItem = menuItems[x++])
			{
				menuID = menuItem.id.substring(8);
				addEvent(menuItem, 'click', this.onClick.bind(this, menuID));
				addEvent(menuItem, 'mouseover', this.onMouseover.bind(this, menuID));
				menuItem.subMenu = new SubMenu(menuItem.id.substring(8), menuItem.offsetLeft);
				this.menuItems[menuID] = menuItem;
			}
			
			var mainNav = document.getElementById('mainNav');
			if (mainNav)
			{
				addEvent(mainNav, 'mouseover', this.cancelMouseout.bind(this));
				addEvent(mainNav, 'mouseout', this.onMouseout.bind(this, this.activeMenu));
			}
			
			addEvent(window, 'unload', this.cleanUp.bind(this));
		}
	},
	cleanUp: function()
	{
		this.menuActive = false;
		this.menuItems = null;
		this.element = null;
	},
	onClick: function(x)
	{
		clearTimeout(this.menuItemTimeout);
		this.menuActive = true;
		this.handleMouseover(x);
	},
	onMouseover: function(x, e)
	{
		clearTimeout(this.menuItemTimeout);
		
		if (x != this.activeMenu)
		{
			var timeOut = 250;
			
			if (this.menuActive)
			{
				var target = e.target || e.srcElement;

				if (target.nodeType == 3) target = target.parentNode;

				timeOut = target.nodeName == 'A' ? 50 : 100;
			}
			
			this.menuItemTimeout = setTimeout(this.onClick.bind(this, x), timeOut);
		}
	},
	onMouseout: function(x)
	{
		clearTimeout(this.menuTimeout);
		clearTimeout(this.menuItemTimeout);
		this.menuTimeout = setTimeout(this.handleMouseout.bind(this, x), 5000);
	},
	cancelMouseout: function()
	{
		clearTimeout(this.menuTimeout);
	},
	handleMouseover: function(x)
	{
		var menu;
		
		if (this.menuActive && this.menuItems && x != this.activeMenu)
		{
			if (menu = this.menuItems[this.activeMenu])
			{
				removeClass(menu, 'active');
				
				if (menu.subMenu.element)
				{
					removeClass(menu.subMenu.element, 'active');
				}
			}
			
			this.activeMenu = x;
			
			if (menu = this.menuItems[this.activeMenu])
			{
				addClass(menu, 'active');
				
				if (menu.subMenu.element)
				{
					addClass(menu.subMenu.element, 'active');
				}
			}
		}
	},
	handleMouseout: function(x)
	{
		this.handleMouseover(x);
		this.menuActive = false;
	}
});

function SubMenu(ID, offset)
{
	this.element = document.getElementById('groupNav' + ID);
	this.offset = offset;
	
	this.init();
}

Object.extend(SubMenu.prototype,
{
	init: function()
	{
		// ...
		var menu = firstChild(this.element, 'ul');
		if (menu)
		{
			var menuItem = lastChild(menu, 'li');
			if (menuItem)
			{
				this.offset -= Math.floor(menuItem.offsetLeft / 2);
				this.offset += 54; // half of the width of a tab
				if (this.offset < 100) this.offset = 100;
				if (this.offset + menuItem.offset > 880) this.offset = 880 - menuItem.offsetLeft;
				this.element.style.left = this.offset + 'px';
			}
		}
	}
});