(function ($)
{    
	$.fn.simpleSpy = function (limit, interval)
	{
		// set some defaults
		limit = limit || 2;
		interval = interval || 4000;
	
		return this.each(function ()
		{
			// 1. setup
			// capture a cache of all the list items
			var $list = $(this),
						items = [], // uninitialised
						currentItem = limit,
						total = 0, // initialise later on
						height = $list.find('> li:first').height();
			
			// capture the cache
			$list.find('> li').each(function ()
			{
				items.push('<li>' + $(this).html() + '</li>');
			});
			
			total = items.length;
			
			$list.wrap('<div class="spyWrapper" />').parent().css({ height: height * limit });

			// chomp the list down to limit li elements
			$list.find('> li').filter(':gt(' + (limit - 1) + ')').remove();

			// 2. effect        
			function spy()
			{
				// insert a new item with opacity and height of zero
				var $insert = $(items[currentItem]).css({height: 0, opacity: 0, display: 'none'}).prependTo($list);
				
				// fade the LAST item out
				$list.find('> li:last').animate({opacity: 0}, 1000, function ()
				{
					// increase the height of the NEW first item
					$insert.animate({ height : height }, 1000).animate({ opacity : 1 }, 1000);

					// finally fade the first item in (and we can remove the last)
					$(this).remove();
				});
				
				currentItem++;
				if (currentItem >= total)
				{
					currentItem = 0;
				}
				
				// trigger the effect again in 4 seconds
				setTimeout(spy, interval);
			}
			
			spy();
		});
	};    
})(jQuery);
