/*
 *
 * Copyright (c) 2006/2007 Sam Collett (http://www.texotela.co.uk)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * Version 2.0
 * 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  $("#news").newsticker(); // or $("#news").newsTicker(5000);
    *
    */
    $.fn.newsTicker = $.fn.newsticker = function(delay) {
        delay = delay || 4000;
        initTicker = function(el) {
            stopTicker(el);
            el.items = $("li", el);
            // hide all items (except first one)
            el.items.not(":eq(0)").hide().end();
            // current item
            el.currentitem = 0;
            //La visualizzazione deve partire immediatamente
            doTick(el);
            startTicker(el);    //Questo gestirà automaticamente il successivo elemento (se presente)
        };
        startTicker = function(el) {
            el.tickfn = setInterval(function() { doTick(el) }, delay)
        };
        stopTicker = function(el) {
            clearInterval(el.tickfn);
        };
        pauseTicker = function(el) {
            el.pause = true;
        };
        resumeTicker = function(el) {
            el.pause = false;
        };
        doTick = function(el) {
            // don't run if paused
            if (el.pause) return;
            // pause until animation has finished
            el.pause = true;
            // hide current item
            if (el.items.length > 0) {
                $(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() {
					            el.pause = false;
					        }
				        );
			        }
		        );
            }   //if (el.items.length > 0)
        };
        this.each(
		function() {
		    if (this.nodeName.toLowerCase() != "ul") return;
		    initTicker(this);
		}
	)
	.addClass("newsticker")
	.hover(
		function() {
		    // pause if hovered over
		    pauseTicker(this);
		},
		function() {
		    // resume when not hovered over
		    resumeTicker(this);
		}
	);
        return this;
    };

})(jQuery);
