/*
 *
 * Copyright (c) 2006-2008 Sam Collett (http://www.texotela.co.uk)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * Version 2.0.2
 * Demo: http://www.texotela.co.uk/code/jquery/newsticker/
 *
 * $LastChangedDate$
 * $Rev$
 *
 */
 
(function($) {
/*
 * A basic news ticker.
 *
 * @name     newsticker (or newsTicker)
 * @param    delay      Delay (in milliseconds) between iterations. Default 4 seconds (4000ms)
 * @author   Sam Collett (http://www.texotela.co.uk)
 * @example  $("#newsticker").newsticker(); // or $("#newsticker").newsTicker(5000);
 *
 */
$.fn.newsTicker = $.fn.newsticker = function(delay)
{
    delay = delay || 4000;
    initTicker = function(el)
    {
        $.newsticker.clear(el);
        el.items = $(".ntick", el);
        // hide all items (except first one)
        el.items.not(":eq(0)").hide().end();
        // current item
        el.currentitem = 0;
        startTicker(el);
    };
    startTicker = function(el)
    {
        el.tickfn = setInterval(function() { doTick(el) }, delay)
    };
    doTick = function(el)
    {
        // don't run if paused
        if(el.pause) return;
        // pause until animation has finished
        $.newsticker.pause(el);
        // hide current item
        $(el.items[el.currentitem]).fadeOut("slow",
            function()
            {
                $(this).hide();
                // move to next item and show
                el.currentitem = ++el.currentitem % (el.items.size());
                $(el.items[el.currentitem]).fadeIn("slow",
                    function()
                    {
                        $.newsticker.resume(el);
                    }
                );
            }
        );
    };
    this.each(
        function()
        {
            if(this.nodeName.toLowerCase()!= "ul") return;
            initTicker(this);
        }
    )
    .addClass("newsticker")
    .hover(
        function()
        {
            // pause if hovered over
            $.newsticker.pause(this);
        },
        function()
        {
            // resume when not hovered over
            $.newsticker.resume(this);
        }
    );
    return this;
};


$.newsticker = $.newsTicker =
{
    pause: function(el)
    {
        (el.jquery ? el[0] : el).pause = true;
    },
    resume: function(el)
    {
        (el.jquery ? el[0] : el).pause = false;
    },
    clear: function(el)
    {
        el = (el.jquery ? el[0] : el);
        clearInterval(el.tickfn);
        el.tickfn = null;
        el.items = null;
        el.currentItem = null;
    }
}

})(jQuery);
