(function ($) {
    
$.fn.simpleSpy = function (limit, interval, callback) {
    var limit = limit || 4;
    var interval = interval || 4000;
	var callback = callback || null;
    
	var timeout;
	
    return this.each(function () {
        // 1. setup
            // capture a cache of all the list items
            // chomp the list down to limit li elements
        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();
        
        $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({
                display : 'none'
            }).prependTo($list);
                        
            // fade the LAST item out
            $list.find('> li:last').hide("slow", function () {
                // increase the height of the NEW first item
                $insert.show("slow", function(){			
								if (typeof callback == 'function') {
									callback();
            					}
				});
                
                // AND at the same time - decrease the height of the LAST item
                //$(this).hide("fast", function () {
                    // finally fade the first item in (and we can remove the last)
                    $(this).remove();
                //});
            });
            
            currentItem++;
            if (currentItem >= total) {
                currentItem = 0;
            }
			
            clearTimeout(timeout);
            timeout = setTimeout(spy, interval);
			
        }
        
        spy();
    });
};
    
})(jQuery);

