// 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: 3000, // 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);

	  // This sets an interval that will be called continuously.
	  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
	  });
}

})(jQuery);

