//plugin:  "Self executing anonymous function"  -- called by (jQuery);) at end of function, which is passed into the value "$"
(function ($) {
 
	//new function   
	$.fn.simpleSpy = function (loadUrl, limit, interval) {
	    
	    
	  // interval = interval ||4000;
	    limit = limit || 7;
	  
	    
	    function getSpyItem($source) {
	        var $items = $source.find('> li');
	        //alert(rc.xehVoteTickerData);
	        if ($items.length == 1) {
	            // do an hit to get some more
	            $source.load(loadUrl);
	        } else if ($items.length == 0) {
	            return false;
	        }
	        
	        // grab the first item, and remove it from the $source
	        return $items.filter(':first').remove();
	    }
	    
	    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),
	            running = true,
	            height = $list.find('> li:first').height();//alert(height);
	           //height=78;
	            
	        // TODO create the $source element....
	        var $source = $('<ul />').hide().appendTo('body');
	                    
	        $list.wrap('<div class="spyWrapper" />').parent().css({ height : height * limit });
	        
	        $list.find('> li').filter(':gt(' + (limit - 1) + ')').appendTo($source);
	
	        $list.bind('stop', function () {
	            running = false;
	        }).bind('start', function () {
	            running = true;
	        });
	
	        // 2. effect
	        function spy() {
	        	
	            if (running) {
	                var $item = getSpyItem($source);
	
	                if ($item != false) {
	                    // insert a new item with opacity and height of zero
	                    var $insert = $item.css({
	                        height : 0,
	                        opacity : 0.1,
	                        display : 'none'
	                    }).prependTo($list);
	
	                    // fade the LAST item out
	                    $list.find('> li:last').animate({ opacity : 0}, 600, function () {
	                        // increase the height of the NEW first item;
	                        //make sure the time (currently 400) is not more than your lowest possible value of the interval (currently 800)
	                        $insert.animate({ height : height }, 400).animate({ opacity : 1 }, 600);
	
	                        // AND at the same time - decrease the height of the LAST item
	                       //  $(this).animate({ height : 0 }, interval, function () {
	                            // finally fade the first item in (and we can remove the last)
	                            $(this).remove();
	                       //  });
	                    });             
	                }                
	            }
	           
	               
	            //we want the interval to be random, so we will set it here so it changes with every call
	        	//it will return a number between 800  and 5800 (.8 - 5.8 seconds)
	        	interval = Math.floor(Math.random()*6000) + 800; //alert(interval);
	            setTimeout(spy, interval);
	        }
	        
	        spy();
	    });
	};
    
})(jQuery);