/*
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

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! :-)

*/

(function($) {
    
    function runTicker(settings) {
	if(settings.firstRun == 1){
	    currentLength = settings.currentLength;
	    currentItem = settings.currentItem;
	    settings.firstRun = 0;
	}
	if(currentItem == settings.newsItemCounter + 1){
	    currentItem = 0;
	}
	
	if(currentLength == 0) {
	    if(settings.newsLinks[currentItem].length > 0) {
		$(settings.newsList).empty().append('<li><a href="'+ settings.newsLinks[currentItem] +'"></a></li>');
	    }
	    else {
		$(settings.newsList).empty().append('<li></li>');
	    }
	}
	
	if( currentLength % 2 == 0) {
	    placeHolder = settings.placeHolder1;
	}
	else {
	    placeHolder = settings.placeHolder2;
	}
	
	if( currentLength <= settings.newsItems[currentItem].length + 1) {
	    var tickerText = settings.newsItems[currentItem].substring(0,currentLength);
	    if(settings.newsLinks[currentItem].length > 0) {
		$(settings.newsList + ' li a').text(tickerText + placeHolder);
	    }
	    else {
		$(settings.newsList + ' li').text(tickerText + placeHolder);
	    }
	    currentLength ++;
	    setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate);
	}
	else {
	    if(settings.newsLinks[currentItem].length > 0) {
		$(settings.newsList + ' li a').text(settings.newsItems[currentItem]);
	    }
	    else {
		$(settings.newsList + ' li').text(settings.newsItems[currentItem]);
	    }
	    currentLength = 0;
	    currentItem ++;
	    setTimeout(function(){runTicker(settings); settings = null;},settings.loopDelay);
	}
    }
    
    $.fn.extend({
	    newsTicker: function(settings) {
		settings = jQuery.extend({
			newsList: "#news",
			tickerRate: 80,
			startDelay: 100,
			loopDelay: 3000,
			placeHolder1: " |",
			placeHolder2: "_"
		    }, settings);
		
		var newsItems = new Array();
		var newsLinks = new Array();
		var newsItemCounter = 0;
		
		$(settings.newsList + ' li').hide();
		
		$(settings.newsList + ' li').each(function(){
			if($(this).children('a').length) {
			    newsItems[newsItemCounter] = $(this).children('a').text();
			    newsLinks[newsItemCounter] = $(this).children('a').attr('href');
			}
			else {
			    newsItems[newsItemCounter] = $(this).text();
			    newsLinks[newsItemCounter] = '';
			}
			newsItemCounter ++;
		    });
		
		settings = jQuery.extend(settings,{
			newsItems: newsItems,
			newsLinks: newsLinks,
			newsItemCounter: newsItemCounter - 1,
			currentItem: 0,
			currentLength: 0,
			firstRun:1
		    });
		
		setTimeout(function(){runTicker(settings); settings = null;},settings.startDelay);
	    }
	    
	});
    

})(jQuery);
