/*
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

*/

newsList: "#news" // assumes unordered list; specify the ul holding the news items
tickerRate: 100 // time gap between display of each letter (ms)
startDelay: 500 // delay before first run of the ticker (ms)
loopDelay: 10000 // 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


$(document).ready(function() {
 var options = {
 newsList: "#news",
 startDelay: 10,
 placeHolder1: " "
 }
 $().newsTicker(options);
});


(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 (settings.newsItems[currentItem] != null) {

            if (currentLength == 0) {
                if (settings.newsLinks[currentItem].length > 0) {
                    var ClassStr = '';
                    
                    if (settings.newsClass[currentItem].length > 0) {
                        ClassStr = ' class="' + settings.newsClass[currentItem] + '"';
                    }

                    $(settings.newsList).empty().append('<li><a href="' + settings.newsLinks[currentItem] + '"' + ClassStr + '></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 newsClass = 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');
                    newsClass[newsItemCounter] = $(this).children('a').attr('class');
                }
                else {
                    newsItems[newsItemCounter] = $(this).text();
                    newsLinks[newsItemCounter] = '';
                    newsClass[newsItemCounter] = '';
                }
                newsItemCounter++;
            });

            settings = jQuery.extend(settings, {
                newsItems: newsItems,
                newsLinks: newsLinks,
                newsClass: newsClass,
                newsItemCounter: newsItemCounter - 1,
                currentItem: 0,
                currentLength: 0,
                firstRun: 1
            });

            setTimeout(function() { runTicker(settings); settings = null; }, settings.startDelay);
        }

    });


})(jQuery);