/*

 *

 * 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: 2007-05-29 11:31:36 +0100 (Tue, 29 May 2007) $

 * $Rev: 2005 $

 *

 */

 

(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 || 39000;

	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;

		startTicker(el);

	};

	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

		$(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;

					}

				);

			}

		);

	};

	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);