// ============================================
// News Rotator
//    image rotator for homepage
//    author: John Norton
//    date: 4/22/09
//    version: 0.1
// ============================================
(function($) {
	$.fn.NewsRotator = function(options) {
		var settings = jQuery.extend({
				base:			'.spotlight', //The object that holds all the news sotries to rotate. (jQuery Selector)
				itemsToRotate:	'div.spotlightItem', //The stories to rotate (jQuery Selector)
				itemsId:		'__newsItem', //The id to associate with each news item. This will be applied to the item via javascript (String)
				fadeTime:		3000, //Time it takes to fade between stories. 1000 = 1s (Integer)
				waitTime:		3000, //Time to hold a story in place before it rotates again. 1000 = 1s (Integer)
				waitToStart:    4000, //Initial wait time. 1000 = 1s (Integer)
				showNav:		true, //Show/hide navigation numbers (Boolean)
				navItem:		'<li><a href="javascript:;" title="{trigger}">{#}</a></li>', //How a navigation item should be rendered. Put {#} for the number location and 'title="{trigger}"' on the tiggering element (String)
				navBase:		'.spotlightNav', //Object that will contain our navigation (jQuery Selector)
				navEvent:		'click', //Navigation triggering event (String)
				navActiveClass:	'active', //Navigation class for the active state (String)
				loop:			true, //Repeat/Stop the news stories after we've gone through (Boolean)
				//----- Dont Touch -----
				jumpped:		false
		},options||{});
		
		$(document).ready(function() {
			$(settings.base+' '+settings.itemsToRotate+':first').css('display', 'block');
			settings.jumpped = false; //just incase someone tried to manualy set this on load we need to fix that or the rotation wont ever run
			if($(settings.base+' '+settings.itemsToRotate).size() == 1) { //if there is only one item we probebly shouldnt rotate hu?
				settings.jumpped = true;
			}
			if(settings.showNav) {  //draw navigation
				i = 1;
				$.each($(settings.base+' '+settings.itemsToRotate), function() {
					$(this).attr('id', settings.itemsId+i);
					s = settings.navItem;
					s = s.replace('{#}', i);
					s = s.replace('{trigger}', i);
					$(settings.navBase).append(s);
					$(settings.navBase+' *[title='+i+']').bind(settings.navEvent, $.fn.NewsRotator.JumpToItem);
					i++;
				});
				$(settings.navBase+' *[title=1]').addClass(settings.navActiveClass);
			}
			setTimeout($.fn.NewsRotator.Fade, settings.waitToStart);
		});
		
		$.fn.NewsRotator.Fade = function() {
			if(settings.jumpped) {
				//do nothing. JumpToItem has taken over from here. But we can reset the Jumped counter since all the timeouts have finished.
				settings.jumpped = false;
			}
			else {
				o = $(settings.base+' '+settings.itemsToRotate+':visible');
				o.fadeOut(settings.fadeTime);
				if(o.next().size() != 0 && o.next().attr('id').search(settings.itemsId) != -1) {
					o.next().fadeIn(settings.fadeTime);
					setTimeout($.fn.NewsRotator.Fade, settings.waitTime+settings.fadeTime);
					n = $(settings.navBase+' .'+settings.navActiveClass);
					$(settings.navBase+' *').removeClass(settings.navActiveClass);
					n.parent().next().children().addClass(settings.navActiveClass);
				}
				else if(settings.loop) {
					$(settings.base+' '+settings.itemsToRotate+':first').fadeIn(settings.fadeTime);
					setTimeout($.fn.NewsRotator.Fade, settings.waitTime+settings.fadeTime);
					$(settings.navBase+' *').removeClass(settings.navActiveClass);
					$(settings.navBase+' *[title=1]').addClass(settings.navActiveClass);
				}
				
			}
		}
		
		$.fn.NewsRotator.JumpToItem = function()
		{
			$(settings.navBase+' *').removeClass(settings.navActiveClass);
			$(this).addClass(settings.navActiveClass);
			$(settings.base+' '+settings.itemsToRotate).css('display', 'none');
			$(settings.base+' #'+settings.itemsId+$(this).attr('title')).css('display', 'block');
			settings.jumpped = true;
		}
	};
})(jQuery);