/*
News ticker plugin (BBC news style)
Bryan Gullan,2007
version 1.1.1
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) {
            $(settings.newsList).empty().append('<li><a href="'+ settings.newsLinks[currentItem] +'"></a></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);
            $(settings.newsList + ' li a').text(tickerText + placeHolder);
            currentLength ++;
            setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate);
        }
        else {
            $(settings.newsList + ' li a').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 a').each(function(){
                newsItems[newsItemCounter] = $(this).text();
                newsLinks[newsItemCounter] = $(this).attr('href');
                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);