var Menu = {
	init: function()
	{
		Menu.duration = 0.15;
		Menu.frameRate = 19;
		
		Menu._expanded = null;
		
		Menu.collapseUl = null;
		Menu.collapseUlHeight = 0;
		Menu.collapseIncrement = 0;
		
		Menu.expandUl = null;
		Menu.expandUlHeight = 0;
		Menu.expandUlHeightTarget = 0;
		Menu.expandIncrement = 0;
		
		Menu.activeAs = Core.getElementsByClass('active');
		if (Menu.activeAs.length != 1)
		{
			// alert('Ikke det korrekte antal aktive links');
		}
		else
		{
			Menu.activeA = Menu.activeAs[0];
			if (Core.hasClass(Menu.activeA, 'third'))
			{
				Menu.activeLi = Menu.activeA.parentNode.parentNode.parentNode;
				Core.addClass(Menu.activeLi, 'expanded');
			}
		}
		
		Menu.submenuLis = Core.getElementsByClass('hasmenu');
		for (var i = 0; i < Menu.submenuLis.length; i++)
		{
			if (Core.hasClass(Menu.submenuLis[i], 'expanded'))
			{
				Menu._expanded = Menu.submenuLis[i];
			}
			
			var a = Menu.submenuLis[i].getElementsByTagName('a')[0];
			a.onclick = Menu.toggleMenu;
			
			var subUl = Menu.submenuLis[i].getElementsByTagName('ul')[0];
			var numLis = subUl.getElementsByTagName('li').length;
			subUl._numLis = numLis;
			subUl._height = 19 * numLis;
			
			if (!Core.hasClass(Menu.submenuLis[i], 'expanded'))
			{
				a.style.backgroundPosition = '0 0';
				subUl.style.height = '0';
			}
		}
	},
	
	toggleMenu: function()
	{
		var targetUl = this.nextSibling;
		var targetLi = this.parentNode;
		while (targetUl.nodeType == 3)
		{
			targetUl = targetUl.nextSibling;
		}

		if (Core.hasClass(targetLi, 'expanded'))
		{
			Menu.collapse(targetUl, targetLi, this);
			Menu._expanded = null;
		}
		else
		{
			if (Menu._expanded)
			{
				var expandedUl = Menu._expanded.getElementsByTagName('ul')[0];
				var expandedA = Menu._expanded.getElementsByTagName('a')[0];
				while (expandedA.nodeType == 3)
				{
					expandedA = expandedA.nextSibling;
				}
				Menu.expand(targetUl, targetLi, this);
				Menu.collapse(expandedUl, Menu._expanded, expandedA);
			}
			else
			{
				Menu.expand(targetUl, targetLi, this);
			}
			Menu._expanded = targetLi;
		}

		this.blur();
		return false;
	},
	
	collapse: function(ul, li, a)
	{
		Menu.collapseUl = ul;
		Menu.collapseUlHeight = ul._height;
		Menu.collapseIncrement = Menu.collapseUlHeight / (Menu.frameRate * Menu.duration);
		// ul.style.height = '0';
		a.style.backgroundPosition = '0 0';
		Core.removeClass(li, 'expanded');
		Menu.animateCollapse();
	},
	
	expand: function(ul, li, a)
	{
		Menu.expandUl = ul;
		Menu.expandUlHeightTarget = ul._height;
		Menu.expandIncrement = Menu.expandUlHeightTarget / (Menu.frameRate * Menu.duration);
		// ul.style.height = ul._height + 'px';
		a.style.backgroundPosition = '0 -42px';
		Core.addClass(li, 'expanded');
		Menu.animateExpand();
	},

	animateCollapse: function()
	{
		Menu.collapseUlHeight -= Menu.collapseIncrement;
		if (Menu.collapseUlHeight <= 0)
		{
			Menu.collapseUl.style.height = '0';
		}
		else
		{
			Menu.collapseUl.style.height = Math.round(Menu.collapseUlHeight) + 'px';
			setTimeout(Menu.animateCollapse, 50);			
		}
	},
	
	animateExpand: function()
	{
		Menu.expandUlHeight += Menu.expandIncrement;
		if (Menu.expandUlHeight >= Menu.expandUlHeightTarget)
		{
			Menu.expandUl.style.height = Menu.expandUlHeightTarget + 'px';
			Menu.expandUlHeight = 0;
		}
		else
		{
			Menu.expandUl.style.height = Math.round(Menu.expandUlHeight) + 'px';
			setTimeout(Menu.animateExpand, 50);			
		}
	}
};


Core.start(Menu);
