// Create a self-invoking anonymous function. That way, 
// we're free to use the jQuery dollar symbol anywhere within.
(function($) {

    // We name our plugin "newscroll". When creating our function, 
    // we'll allow the user to pass in a couple of parameters.
    $.fn.newsScroll = function(options) {

        // For each item in the wrapped set, perform the following. 
        return this.each(function() {

            var 
            // Caches this - or the ul widget(s) that was passed in.
            //  Saves time and improves performance.
		  $this = $(this),

            // If the user doesn't pass in parameters, we'll use this object. 
		  defaults = {
		      speed: 400, // How quickly should the items scroll?
		      delay: 2000, // How long a rest between transitions?
		      list_item_height: $this.children('li').outerHeight() // How tall is each list item? If this parameter isn't passed in, jQuery will grab it.
		  },
            // Create a new object that merges the defaults and the 
            // user's "options".  The latter takes precedence.
		  settings = $.extend({}, defaults, options);

		  timer = false;
            
            $this.mouseout(function() { 
            timer = setInterval(function() {
                // Get the very first list item in the wrapped set.
                $this.children('li:first')
                // Animate it
	  	    		.animate({
	  	    		    marginTop: '-' + settings.list_item_height, // Shift this first item upwards.
	  	    		    opacity: 'hide'
	  	    		}, // Fade the li out.

                // Over the course of however long is 
                // passed in. (settings.speed)
	  	    		   settings.speed,

                // When complete, run a callback function.
	  	    		   function() {

	  	    		       // Get that first list item again. 
	  	    		       $this.children('li:first')
	  	 					     .appendTo($this) // Move it the very bottom of the ul.

	  	    		       // Reset its margin top back to 0. Otherwise, 
	  	    		       // it will still contain the negative value that we set earlier.
	  	 					     .css('marginTop', 0)
	  	 					     .fadeIn(300); // Fade in back in.
	  	    		   }
 	 			  ); // end animate
            }, settings.delay); // end setInterval
        }).mouseout(); //Start Ticker By Default
        $this.mouseover(function() {
            clearInterval(timer);
        });
    });
}

})(jQuery);

