var Menu = function() {
	var Dom = YAHOO.util.Dom;
	var Net = YAHOO.util.Connect;
	var Anim = YAHOO.util.Anim;
	var Motion = YAHOO.util.Motion;
	var Event = YAHOO.util.Event;
	
	var menuAnim = null;
	var lifeTimesAnim = null;
	var lifeTimesRegion = null;
	var activeMenu = null;
	var activeItem = null;
	var timeOutId = 0;
	
	function clearMenuTimeout()
	{
		clearTimeout(timeOutId);
		timeOutId = 0;
	}
	
	function hideMenu() {
		
		clearMenuTimeout();
		
		if(menuAnim && menuAnim.isAnimated())
        {
            menuAnim.stop(true);
            activeMenu.style.zIndex = 350;           
        }
		
		Dom.removeClass(activeItem.parentNode, "on");
		
		activeItem = null;
		
		activeMenu.style.visibility = "hidden";
        activeMenu.style.zIndex = 350;
		activeMenu = null;
	}
	
	
	// Menu
	function getSubMenu(evtArgs)
    {
        var page = evtArgs.page;
		var elId = "submenu-" + page.id;
		var element = Dom.get(elId);
		if(element !== null)
		{
			return element;
		}
		
		// Creating menu
		var html = ['<div class="submenu" id="', elId, '"><ul>'];
		
		var imax = page.subPages.length, className = "";
		for(var i = 0; i < imax; i++)
		{
			className = (i == 0) ? ' class="first"' : "";
			html.push('<li' + className + ' id="' + page.subPages[i].id + '">');
			html.push('<a href="' + page.subPages[i].url + '"><img src="/images/s.gif" width="53" height="44" style="background-image: url(/data/menu/' + page.subPages[i].image + ')" class="rollover-image" /><em><b>');
			html.push(page.subPages[i].name);
			html.push("</b></em></a>");
			html.push('</li>');
		}
		html.push("</ul></div>");
		//var mouseOverTagName = (YAHOO.env.ua.ie) ? "a" : "b";
		var mouseOverTagName = "a"; 
		
		var el = NB.insertHtml("beforeend", Dom.get("page-content"), html.join(""));
		Event.on(el.getElementsByTagName(mouseOverTagName), "mouseover", onMenuLinkOver, evtArgs);
		Event.on(el.getElementsByTagName(mouseOverTagName), "mouseout", onMenuLinkOut, evtArgs);
		
		return el;
		
    }
	
	function initializeMenu()
	{
		var menuLink = null, evtArgs;
		for(var i = 0; i < pagesJson.length; i++)
		{
			var menuItem = Dom.get("menu-item-" + pagesJson[i].id);
			if(Dom.hasClass(menuItem, "on"))
			{
				continue;
			}
			
			menuLink = menuItem.firstChild;
			
			var evtArgs = {
                element : menuLink,
                page : pagesJson[i]
            };
			
			Event.on(menuLink, "mouseover", onMenuLinkOver, evtArgs);
			Event.on(menuLink, "mouseout", onMenuLinkOut, evtArgs);
		}
		
		Event.on(Dom.get("lifetimes").firstChild, "mouseover", onLifeTimesOver);
		Event.on("lifetimes-expanded", "mouseout", onLifeTimesOut);
	}
	
	function onLifeTimesOver()
	{
		var lifetimes = Dom.get("lifetimes-expanded");
		
		lifeTimesAnim = new Anim(lifetimes, {height: {to : lifetimes.firstChild.offsetHeight + 10}}, .5, YAHOO.util.Easing.easeOut);
		lifeTimesAnim.onComplete.subscribe(function() {
			lifeTimesRegion = Dom.getRegion(lifetimes);
		});
		Dom.setStyle(lifetimes, "height","40px");
		Dom.setStyle(lifetimes, "visibility", "visible");
		lifeTimesAnim.animate();
        
	}
	
	function onLifeTimesOut(e) 
	{
		var lifetimes = Dom.get("lifetimes-expanded");
		
        var xy = Event.getXY(e);
		
		if((lifeTimesAnim && lifeTimesAnim.isAnimated()))
		{
			lifeTimesRegion = Dom.getRegion(lifetimes);
		}
		
		if(xy[0] - 2 <= lifeTimesRegion.x || xy[1] - 2 <= lifeTimesRegion.y || xy[0] + 2 >= lifeTimesRegion.width + lifeTimesRegion.x || xy[1] + 2 >= lifeTimesRegion.height + lifeTimesRegion.y)
		{
			if((lifeTimesAnim && lifeTimesAnim.isAnimated()))
			{
				lifeTimesAnim.stop();
			}
			
			lifeTimesAnim = new Anim(lifetimes, {height: {to : 0}}, .5, YAHOO.util.Easing.bounceOut);
			lifeTimesAnim.animate();
		}
		else
		{			
			return;
		}		
	}
	
	function onMenuLinkOver(e, evtArgs)
	{
		var subMenu = getSubMenu(evtArgs);
		
		if(timeOutId > 0)
		{
			clearMenuTimeout();
			if(activeMenu != null && subMenu.id == activeMenu.id)
			{
				return;
			}
			else
			{
				hideMenu();
			}
		}
		
		activeMenu = subMenu;
		activeItem = evtArgs.element;
		
		Dom.addClass(activeItem.parentNode, "on");
		var xy = Dom.getXY(evtArgs.element);
		xy[1] -= 1;
		Dom.setXY(activeMenu, xy);
		var middleXY = [xy[0] + evtArgs.element.offsetWidth + 20, xy[1]];
		var endXY = [xy[0] + evtArgs.element.offsetWidth, xy[1]];
		
		
		
		menuAnim = new Motion(activeMenu, {points: {to: middleXY}}, .3, YAHOO.util.Easing.easeOut);
		menuAnim.onComplete.subscribe(function() {
			activeMenu.style.zIndex = 500;
			menuAnim = new Motion(activeMenu, {points: {to: endXY}}, 1, YAHOO.util.Easing.elasticOut);
			menuAnim.animate();
		});
		
		menuAnim.animate();
		
		activeMenu.style.visibility = "visible";        
	}	
	
	function onMenuLinkOut(e, evtArgs)
	{
		if(timeOutId > 0)
		{
			clearMenuTimeout();
		}
		
		timeOutId = setTimeout(hideMenu, 300);
	}
	
	initializeMenu();
	
}();
