(function () {
    YAHOO.util.Event.onDOMReady(function (ev) {
        var spotlight   = YAHOO.util.Dom.get("spotlight"),
		   	title 		= YAHOO.util.Dom.get('carousel-title'),
		  		description = YAHOO.util.Dom.get('carousel-description'),
				carouselItemsTop = YAHOO.util.Dom.get('carousel-items-top'),
				carouselItemsTopNodes = carouselItemsTop.children,
        		carousel    = new YAHOO.widget.Carousel("carousel-right", 
				{
					numVisible: 4,
					isCircular: true
				});

        carousel.on("itemSelected", function (index) {
			showSpotlight(index);
        });
        
        var showSpotlight = function(index) {
        	// item has the reference to the Carousel's item
            var item = carousel.getElementForItem(index);

            if (item) {
				YAHOO.util.Dom.addClass(carouselItemsTopNodes, 'hide');
				
				var element = YAHOO.util.Dom.get('carousel-items-top-' + index);
				YAHOO.util.Dom.removeClass(element, 'hide');

				spotlight.innerHTML = '<a href="' + element.getAttribute('data-permalink') + '"><img src="' + element.getAttribute('data-image') + '" />';
            }
        };

        carousel.render();
        carousel.show();

		var nextCarouselItem = setInterval(function() {
			carousel.selectNextItem();
		}, 5000);
		
		var nodes = YAHOO.util.Dom.get('carousel').children;
		
		YAHOO.util.Event.on(nodes, 'click', function(e) {
			clearInterval(nextCarouselItem);
			
			var index = getItemIndexByElement(YAHOO.util.Event.getTarget(e)),
				el = YAHOO.util.Dom.get('carousel-items-top-' + index);
				
			window.location = el.getAttribute('data-permalink');
		});
		
		var getItemIndexByElement = function(el) {
			if (el && el.tagName.toString().toUpperCase() !== 'LI') {
				el = YAHOO.util.Dom.getAncestorByTagName(el, 'li');
			}
			return carousel.getItemPositionById(el.id);
		};
		
		YAHOO.util.Event.on(nodes, 'mouseover', function(e) {
			if (nextCarouselItem) {
				clearInterval(nextCarouselItem);
			}
			var index = getItemIndexByElement(YAHOO.util.Event.getTarget(e));
			
			carousel.set('selectedItem', index);
		});
	});
})();
