var leftNavEffects = {};
var rightNavEffects = {};

function animateNav(event, direction, effectLocks, targetPx)
{
	var elem = event.element();
	while (elem && elem.nodeName.toLowerCase() != "li")
	{
		elem = elem.up();
	}

	elem = elem.down();
	
	if ((effectLocks[elem.id].direction == "out" && direction == "over") || (effectLocks[elem.id].direction == "over" && direction == "out"))
	{
		effectLocks[elem.id].effect.cancel();
		effectLocks[elem.id] =
		{
			direction: null,
			effect: null
		};
	}

	if (effectLocks[elem.id].direction != direction)
	{
		effectLocks[elem.id].direction = direction;
		effectLocks[elem.id].effect = new Effect.Morph
		(
			elem,
			{
				style:
				{
					backgroundPosition: (direction == "out" ? targetPx + "px 0px" : "0px 0px")
				},
				duration: 0.2,
				beforeStart: function()
				{
					if (direction == "out")
					{
						elem.setStyle
						(
							{
								backgroundPosition: "0px 0px"
							}
						);
					}
				},
				afterFinish: function()
				{
					effectLocks[elem.id] =
					{
						direction: null,
						effect: null
					};
				}
			}
		);
	}
}

function bindNavMouseEvents(elems, ignoreIds, effectLocks, targetPx)
{
	bindNavMouseEventsLoopStart:
	for (var i = 0; i < elems.length; i++)
	{
		var aId = elems[i].down().id;

		for (var j = 0; j < ignoreIds.length; j++)
		{
			if (aId == ignoreIds[j])
			{
				continue bindNavMouseEventsLoopStart;
			}
		}

		effectLocks[elems[i].down().id] =
		{
			direction: null,
			effect: null
		};

		Event.observe
		(
			elems[i],
			"mouseover",
			function(event)
			{
				animateNav(event, "over", effectLocks, targetPx)
			}
		);

		Event.observe
		(
			elems[i],
			"mouseout",
			function(event)
			{
				animateNav(event, "out", effectLocks, targetPx)
			}
		);
	}
}

Event.observe
(
	window,
	"load",
	function()
	{
		var leftNavElems = $$("ul#mainnav > li");
		if (leftNavElems != null && leftNavElems.length > 0)
		{
			bindNavMouseEvents(leftNavElems, ["locations", "legal"], leftNavEffects, 153);
		}

		var rightNavElems = $$("ul#subnav > li");
		if (rightNavElems != null && rightNavElems.length > 0)
		{
			bindNavMouseEvents(rightNavElems, [], rightNavEffects, 130);
		}
	}
);
