
<!--

function init() 
{

	var inlineElements = 'img, span, strong';
	var index, currentItem, scrollerOffset, itemListOffset, scrolling;

	var deselectItem = new YAHOO.util.CustomEvent('deselect');
	var selectItem = new YAHOO.util.CustomEvent('select');
	var nextItem = new YAHOO.util.CustomEvent('next');
	var previousItem = new YAHOO.util.CustomEvent('previous');

	var scroller = YAHOO.util.Dom.get('scroller');
	var itemList = YAHOO.util.Dom.get('itemList');
	var pagingControls = YAHOO.util.Dom.get('pagingControls'); 
	
	currentItem = YAHOO.util.Dom.getFirstChild(itemList);
	currentItem = YAHOO.util.Dom.getNextSibling(currentItem);
	
	function mouseEnterOrLeave(event, target) 
	{
		var relatedTarget = YAHOO.util.Event.getRelatedTarget(event) ? 
			YAHOO.util.Event.getRelatedTarget(event) : 
			event.type === 'mouseout' ? event.toElement : event.fromElement;
		if (typeof relatedTarget === 'undefined') {return false;};
		while (relatedTarget && relatedTarget != target)
		{
			relatedTarget = relatedTarget.parentNode;
		};
		return (relatedTarget != target);
	}

	function mouseoverItemList(event)
	{
		var target = YAHOO.util.Event.getTarget(event);
		var nodeName = target.nodeName.toLowerCase();
		if (inlineElements.indexOf(nodeName) > -1)
		{
			target = YAHOO.util.Dom.getAncestorByTagName(target, 'a') || target;
		}
		if (target.nodeName.toLowerCase() === 'a')
		{
			if (mouseEnterOrLeave(event, target))
			{
				selectItem.fire(target);
			}
		}
		YAHOO.util.Event.preventDefault(event);
	}

	function mouseoutItemList(event)
	{
		var target = YAHOO.util.Event.getTarget(event);
		var nodeName = target.nodeName.toLowerCase();
		if (inlineElements.indexOf(nodeName) > -1)
		{
			target = YAHOO.util.Dom.getAncestorByTagName(target, 'a') || target;
		};
		if (target.nodeName.toLowerCase() === 'a')
		{
			if (mouseEnterOrLeave(event, target))
			{
				deselectItem.fire(target);
			}
		}
		YAHOO.util.Event.preventDefault(event);
	}

	function clickPagingControls(event)
	{
		var target = YAHOO.util.Event.getTarget(event);
		var nodeName = target.nodeName.toLowerCase();
		if (inlineElements.indexOf(nodeName) > -1)
		{
			target = YAHOO.util.Dom.getAncestorByTagName(target,'a') || target;
		};
		if (target.nodeName.toLowerCase() === 'a')
		{
			if (YAHOO.util.Dom.hasClass(target, 'next'))
			{
				nextItem.fire();
			}
			else
				if (YAHOO.util.Dom.hasClass(target, 'previous'))
				{
					previousItem.fire();
				};
		};
		YAHOO.util.Event.preventDefault(event);
	};

	YAHOO.util.Event.addListener(itemList, 'mouseover', mouseoverItemList);
	YAHOO.util.Event.addListener(itemList, 'mouseout', mouseoutItemList);
	YAHOO.util.Event.addListener(pagingControls, 'click', clickPagingControls);

	function reveal(type, args)
	{
		var revealing;
		var attributes;
		var span;
		span = args[0].getElementsByTagName('span')[0];
		if (type === 'select')
		{
			attributes = {top:{to:[0]}};
		}
		else 
			if (type === 'deselect')
			{
				attributes ={top:{to:[110]}};
			};
		revealing = new YAHOO.util.Motion(span, attributes, 0.5, YAHOO.util.Easing.easeOut);
		revealing.animate();
	}

	function scrollTo(type)
	{
		var attributes;
		var organiseItems;
		var itemOffset;
		var scrollDistance;
		if (scrolling) 
		{
			if (scrolling.isAnimated())
			{
				scrolling.stop();
			}
		}
		scrollerOffset = YAHOO.util.Dom.getXY(scroller);
		itemListOffset = YAHOO.util.Dom.getXY(itemList);
		if (type === 'next')
		{
			currentItem = YAHOO.util.Dom.getNextSibling(currentItem);
			organiseItems = function()
			{
				YAHOO.util.Dom.insertAfter(
							YAHOO.util.Dom.getFirstChild(itemList).cloneNode(true), 
							YAHOO.util.Dom.getLastChild(itemList));
				itemList.removeChild(YAHOO.util.Dom.getFirstChild(itemList));
				YAHOO.util.Dom.setXY(itemList, itemListOffset);
			};
		}
		else if (type === 'previous')
		{
			currentItem = YAHOO.util.Dom.getPreviousSibling(currentItem);
			organiseItems = function()
			{
				YAHOO.util.Dom.insertBefore(
							YAHOO.util.Dom.getLastChild(itemList).cloneNode(true),
							YAHOO.util.Dom.getFirstChild(itemList));
				itemList.removeChild(YAHOO.util.Dom.getLastChild(itemList));
				YAHOO.util.Dom.setXY(itemList, itemListOffset);
			};
		};
		itemOffset = YAHOO.util.Dom.getXY(currentItem);
		scrollDistance = itemOffset[0] - scrollerOffset[0];
		attributes = {points: {by: [-scrollDistance, 0]}};
		scrolling = new YAHOO.util.Motion(itemList, attributes, 1, YAHOO.util.Easing.easeOut);
		scrolling.onComplete.subscribe(organiseItems);
		scrolling.animate();
	};

	selectItem.subscribe(reveal);
	deselectItem.subscribe(reveal);
	nextItem.subscribe(scrollTo);
	previousItem.subscribe(scrollTo);

}

YAHOO.util.Event.onDOMReady(init);


//-->

