var aMenuTimers = new Array();


function ToggleMenu(strMenu, oCaller, bShowOnly)
{
	var oMenu = $("menu_" + strMenu);

	if (bShowOnly)
	{
		$$("body div.menuContainer").each(function (submenu) {
			var iMenuId = submenu.id.split("_").last();

			if (iMenuId != strMenu)
			{
				$("menu_" + iMenuId).hide();
				clearTimeout(aMenuTimers[iMenuId]);
			}
		});
		
		if (oMenu.visible()) return false;
	}

	if (oCaller)
	{
		var aPosition = Position.cumulativeOffset(oCaller);

		oMenu.style.left = aPosition[0] + 'px';
		oMenu.style.top  = (aPosition[1] + 23) + 'px';
	}

	new Effect.Phase(oMenu);
	
	clearTimeout(aMenuTimers[strMenu]);

	return false;
}


function HideMenuTimer(strMenu, e)
{
	if (!e) var e = window.event;

	var oMenu = $("menu_" + strMenu);

	if (Position.within(oMenu, Event.pointerX(e), Event.pointerY(e)))
	{
		clearTimeout(aMenuTimers[strMenu]);
	}
	else
	{
		aMenuTimers[strMenu] = setTimeout('ToggleMenu("' + strMenu + '")', 500);
	}

	return false;
}




/**
 * HELPERS
 */
Effect.PhaseIn = function(element) {
  element = $(element);

  new Effect.BlindDown(element, {
    queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
  });

  new Effect.Appear(element, {
    queue: { position:'with-last', scope:(element.id || 'global'), limit: 2 },
    to: 0.85
  });
}

Effect.PhaseOut = function(element) {
  element = $(element);

  new Effect.Fade(element, {
    queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
  });

  new Effect.BlindUp(element, {
    queue: { position:'with-last', scope:(element.id || 'global'), limit: 2 }
  });
}

Effect.Phase = function(element) {
  element = $(element);

  if (element.visible())
  {
  	new Effect.PhaseOut(element);
  }
  else
  {
  	new Effect.PhaseIn(element);
  }
}
