/*
News ticker plugin (BBC news style)
Bryan Gullan,2007-2009
version 1.2.2
updated 2009-02-15
http://www.makemineatriple.com/jquery
Use and distrubute freely with this header

version 1.2.2.fork
Data now stored in accessible location, jQuery.data.
newsTicker now accepts a "goto" event.

Options (defaults shown):
newsList: "#news" 	// assumes unordered list; specify the ul holding the news items
tickerRate: 80 		// time gap between display of each letter (ms)
startDelay: 100 	// delay before first run of the ticker (ms)
loopDelay: 3000 	// time for which full text of each item is shown at end of print-out (ms)
placeHolder1: " |"	// character placeholder shown on even loops
placeHolder2: "_"	// character placeholder shown on odd loops

Sample usage:
$(document).ready(function() {
	var options = {
  		newsList: "#news",
 		startDelay: 10,
 		placeHolder1: " []"
	}
	$().newsTicker(options);
});

for markup as follows:

<ul id="news">
<li><a href="http://www.makemineatriple.com">MakeMineATriple.com</a></li>
<li><a href="http://www.jquery.com">jQuery</a></li>
</ul>

Underline text decoration on the link is not recommended! :-)

*/

var autoRun = true;

(function($) {
	
	function runTicker(settings) {


        var list = jQuery(settings.newsList);
        var data = list.data("newsTicker");
        var placeHolder, tickerText;
	
		

	
		if(data.firstRun){
			data.firstRun = false;
		}
		

		if(data.currentLength === 0) {
			if(data.newsLinks[data.currentItem].length > 0) {
				list.empty().append('<li><a href="'+ data.newsLinks[data.currentItem] +'"></a></li>');
			}
			else {
				
				list.empty().append('<li></li>');
			}
		}

		if( data.currentLength % 2 == 0) {
            placeHolder = settings.placeHolder1;
		}
		else {
			placeHolder = settings.placeHolder2;
		}
		if( data.currentLength <= data.newsItems[data.currentItem].length + 1) {
			tickerText = data.newsItems[data.currentItem].substring(0, data.currentLength);
			if(data.newsLinks[data.currentItem].length > 0) {
				list.find("li a").text(tickerText + placeHolder);
			}
			else {
				list.find("li").text(tickerText + placeHolder);
			}
			data.currentLength ++;
			setTimeout(function(){
                runTicker(settings);
                settings = null;
            }, data.tickerRate);
		}
		else
 		{
			if(data.newsLinks[data.currentItem].length > 0) {
				$(data.newsList + ' li a').text(data.newsItems[data.currentItem]);
			}
			else {
				$(data.newsList + ' li').text(data.newsItems[data.currentItem]);
			}
			data.currentLength = 0;
			
			 if(autoRun)
			 {setTimeout(function(){
                if(data.timerActive) {
                    data.timerActive = false;
                } else {
                    data.currentItem = data.nextItem;
                    data.nextItem ++;
                    if(data.nextItem >= data.newsItems.length){
                        data.nextItem = 0;
                    }
                    runTicker(settings);
                }
                settings = null;
            }, data.loopDelay);	
			 }
		}
		

	}

	$.fn.extend({
		newsTicker: function(options) {
			var settings = jQuery.extend({
		 	  	newsList: "#news",
		   		tickerRate: 80,
		    	startDelay: 100,
		    	loopDelay: 3000,
		    	placeHolder1: " |",
		    	placeHolder2: "_"
			}, options);

			var newsItemCounter = 0;
			var ticker = jQuery(settings.newsList);
			var tempsettings;
			
			ticker
            .bind("goto", function(e){
                //console.log('goto: '+e.item);
                var data = jQuery("#ticker").data("newsTicker");
                data.currentItem = e.item;
                data.nextItem = (e.item + 1 >= data.newsItems.length) ? 0 : e.item + 1;
                data.timerActive = true;
                runTicker(settings);                
			})
            .bind("stop", function(e){
                var data = jQuery("#ticker").data("newsTicker");
                data.timerActive = true;            
			})
            .data("newsTicker", {
				newsItems: [],
				newsLinks: [],
				currentItem: 0,
				nextItem: 1,
				currentLength: 0,
				firstRun: true,
				tickerRate: settings.tickerRate,
				loopDelay: settings.loopDelay,
				timerActive: false
			})
			.find("li")
			.each(function(){
                var data = ticker.data("newsTicker");
                
				if($(this).children('a').length) {
					data.newsItems[newsItemCounter] = $(this).children('a').text();
					data.newsLinks[newsItemCounter] = $(this).children('a').attr('href');
				}
				else {
					data.newsItems[newsItemCounter] = $(this).text();
					data.newsLinks[newsItemCounter] = '';
				}
				newsItemCounter ++;
			})
			.hide();
			
            settings = jQuery.extend(settings,{
			 	currentLength: 0,
			 	firstRun: true
			});
			
			tempsettings = settings;

			setTimeout(function(){
                runTicker(tempsettings);
                tempsettings = null;
            }, settings.startDelay);
		}
	
	});

})(jQuery);