/*
 *
 * Copyright (c) 2008 Bradley Dyer Group (http://www.bradleydyer.com)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * Version 1.0
 * Demo: http://www.bradleydyer.com
 *
 * $LastChangedDate$
 * $Rev$
 *
 */
 
 (function($) {

$.fn.listSwapper = $.fn.listswapper = function(delay,fadeNumber)
{
	
	delay = delay || 4000;
	fadeNumber = fadeNumber || 12;
	
	initListSwap = function(el)
	{
		stopTicker(el);
		// Number of elements
		elements = $(el).children();
		// Hide all Elements after fadeNumber
		elements.filter(":gt("+(fadeNumber - 1)+")").hide();
		el.fadeNumber = fadeNumber;
		startTicker(el);

	};
	startTicker = function(el)
	{
		el.tickfn = setInterval(function() { doTick(el) }, delay)
	};
	stopTicker = function(el)
	{
		clearInterval(el.tickfn);
	};
	doTick = function(el)
	{
		// Number of elements
		var elements = $(el).children();
		// Current random element to swap
		var current = Math.floor (Math.random () * el.fadeNumber);
		// Next random element to swap with
		var next = el.fadeNumber + Math.floor ( Math.random () * (elements.length - el.fadeNumber));
		// Fade current element to next
		$(elements[current]).fadeOut("slow",
		function()
		{
			$(this).hide();
			// Move to next element and show
			$(elements[current]).after($(elements[next]))
			// Fade in next element
			$(elements[next]).fadeIn("slow",
				function()
				{
					// Move the old element to the end of the list
					$("li:last-child", el).after($(elements[current]));
				}
			);
		}
		);
			
	};
	
	this.each(
		function()
		{
			if(this.nodeName.toLowerCase()!= "ul") return;
			initListSwap(this);
		}
	)

	return this;
	
};

})(jQuery);