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