/**
 *  Twitter tweet rotator
 *  Author:     mauvm
 *  Required:   jQuery 1.5 or higher
 *  Date:       7/3/2011
 *
 *  @TODO       Convert to jQuery plugin
 **/

var twitterRotator = {
	// Configuration
	rotateSpeed: 	5000,
	fadeSpeed: 		1500,
	delay:			1000,
	
	// Variables
	$twitter: 		null,
	$twitterItems: 	null,
	$twitterNav: 	null,
	itemLength: 	null,
	timerID: 		null,
	
	// Functions
	init:			function() {
		twitterRotator.$twitter 		= $('ul#twitter');
		twitterRotator.$twitterItems 	= twitterRotator.$twitter.find('li');
		twitterRotator.$twitterNav 		= $('span#twitterNav');
		twitterRotator.itemLength		= twitterRotator.$twitterItems.length;
		
		if ( $.browser.msie && $.browser.version.substr(0,1) < 9 ) {
			// IE fix *sigh*
			twitterRotator.fadeSpeed 	= 0;
			twitterRotator.delay 		= 0;
		}	
		
		if ( twitterRotator.itemLength > 1 ) {
			// Initialize
			twitterRotator.$twitterItems.css('display', 'block').hide();
			twitterRotator.timerID = setTimeout( twitterRotator.rotate, twitterRotator.rotateSpeed );
			twitterRotator.rotate();

			// Build navigation HTML
			for( var i = 1; i <= twitterRotator.itemLength; ++i ){
				twitterRotator.$twitterNav.append('<span class="twitterNavLink '+ ( i == 1 ? 'active' : '' ) +'">' + i + '</span>');
			}
			
			twitterRotator.$twitterNav.find('span.twitterNavLink').bind('click', function(){
				if ( twitterRotator.timerID !== null )
					clearTimeout( twitterRotator.timerID );
				
				// Jump to specific item
				twitterRotator.timerID = setTimeout( twitterRotator.rotate, twitterRotator.rotateSpeed );
				twitterRotator.rotate( null, $(this).index() );	
			});
		} else {
			twitterRotator.$twitterItems.first().show();
		}
	},
	rotate:			function( FFFix, index ) {
		if ( twitterRotator.timerID !== null )
			clearTimeout( twitterRotator.timerID );
		
		// Clear active nav link
		twitterRotator.$twitterNav.find('span.twitterNavLink').removeClass('active');
		
		// Rotate
		if ( twitterRotator.itemLength > 1 ) {
			if ( typeof(index) != 'undefined' && index >= 0 ) {
				// Jump to given index
				twitterRotator.$twitter
					.find('> li:visible')
						.stop( true, true )
						.fadeOut( twitterRotator.fadeSpeed )
					.parent()
					.find('> li:eq('+ index +')')
						.delay( twitterRotator.delay )
						.stop( true, true )
						.fadeIn( twitterRotator.fadeSpeed );
			} else if ( twitterRotator.$twitter.find('> li:last').is(':visible') ) {
				// Back to first item
				index = twitterRotator.$twitter
							.find('> li:visible')
								.stop( true, true )
								.fadeOut( twitterRotator.fadeSpeed )
							.parent()
								.find('> li:first')
								.delay( twitterRotator.delay )
								.stop( true, true )
								.fadeIn( twitterRotator.fadeSpeed )
								.index();
			} else if ( twitterRotator.$twitter.find('> li:visible').length > 0 ) {
				// Go to next item
				index = twitterRotator.$twitter
							.find('> li:visible')
								.stop( true, true )
								.fadeOut( twitterRotator.fadeSpeed )
							.next()
								.delay( twitterRotator.delay )
								.stop( true, true )
								.fadeIn( twitterRotator.fadeSpeed )
								.index();
			} else {
				// First item
				index = twitterRotator.$twitter
							.find('> li:first')
								.stop( true, true )
								.fadeIn( twitterRotator.fadeSpeed )
								.index();
			}
			
			// New timeout
			twitterRotator.timerID = setTimeout ( twitterRotator.rotate, twitterRotator.rotateSpeed );
		} else {
			// Only fade in single item
			index = $twitter.find('> li:first').fadeIn( twitterRotator.fadeSpeed ).index();
		}
		
		// Set active nav link
		twitterRotator.$twitterNav.find('span.twitterNavLink:eq('+ index +')').addClass('active');
	}
};
