/*
 *
 * 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)
{
	try
	{
		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;
			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;
	}
	catch(err)
	{
		//fail gracefully without logging atm...
	}
};

})(jQuery);
