/**
 * News ticket plugin, attaches to a <ul> and works on <li>'s with an <a>.
 *
 * @author		Luke Robinson 09/07/09
 * @param		object		config		Config object to change properties of the ticker. See defaults for available methods
 */
$.fn.newsTicker = function(config) {

	var newsWrapper = $(this);
	var newsTicker = this;

	// Apply defaults to any unset properties for this button
	var config = $.extend({
		'tickerID'				:	null,
		'flashingSpeed'			:	440,	// The _ flash
		'tickerSpeed'			:	50,		// The speed the ticker writes to screen.
		'maxCharLength'			:	700,	// Maximum length of a string
		'initialPauseLength'	:	1800,	// Pause time (start of line)
		'endPauseLength'		:	4000,	// Pause time (end of line)
		'onLineFinish'			:	null	// Function to run on line complete		
	}, config);

	var startNewsTicker = function() {

		newsTicker.newsCounter = 0;
		newsTicker.maxCharLen = config.maxCharLength;
		newsTicker.newsItem = newsWrapper.find('li:first a');
		
		newsTicker.newsItem.data('fullStory',newsTicker.newsItem.html())
		newsTicker.newsItem.html('<span id="ticker_content_'+config.tickerID+'"></span><span id="ticker_row_'+config.tickerID+'"">_</span>');
		playAnimation();
		newsTicker.animationTimer = setInterval(playAnimation, config.flashingSpeed);
		setTimeout(function(){newsTicker.addLetterTimer = setInterval(addLetter, config.tickerSpeed)} , config.initialPauseLength);
	}

	
	function playAnimation() {
		($('#ticker_row_'+config.tickerID).css('visibility') == "hidden") ? $('#ticker_row_'+config.tickerID).css('visibility','visible') : $('#ticker_row_'+config.tickerID).css('visibility','hidden');	
	}
	
	function addLetter() {
		$('#ticker_content_'+config.tickerID).html( $('#ticker_content_'+config.tickerID).html() + newsTicker.newsItem.data('fullStory').substring(newsTicker.newsCounter,newsTicker.newsCounter + 1) );
		
		newsTicker.newsCounter++;
		
		// Check if it's finished..			
		var currentLength = $('#ticker_content_'+config.tickerID).html().length;
		if( currentLength == newsTicker.newsItem.data('fullStory').length || currentLength == newsTicker.maxCharLen ) {
			// Add ... if maxed string length
			(currentLength == newsTicker.maxCharLen) ? $('#ticker_content_'+config.tickerID).html($('#ticker_content_'+config.tickerID).html() + "...") : null;
			clearInterval(newsTicker.addLetterTimer);
			if($.isFunction(config.onLineFinish)) {
				config.onLineFinish();
			}			
			setTimeout(nextItem, config.endPauseLength);
		}
	}
	
	function nextItem() {
	
		// Restore an empty li item & cleanup
		$('#ticker_row_'+config.tickerID).remove();
		newsTicker.newsItem.html($('#ticker_content_'+config.tickerID).html());
		clearInterval(newsTicker.animationTimer);
		
		// Add it to end of list
		newsTicker.newsItem.parent('li').remove().appendTo(newsWrapper)
		startNewsTicker();	
	}
	
	startNewsTicker();		

}