(function($) {
	$.fn.rotate = function(options) {
		var self = this;
		
		var settings = {
			items: self.find('li'),
			width: self.width(),
			displayTime: 5000,
			duration: 1000 // transition duration
		};
		
		$.extend(settings, options);
		
		var cur = 0;
		var next;
		var items = settings.items;
		var intervalID;
		
		var doNext = function() {
			calculateNext();
			
			$(items[cur]).fadeOut(settings.duration);
			var transIn = function() {
				$(items[next]).hide().css({top: 0, left: 0}).fadeIn(settings.duration);	
			};
			
			setTimeout(transIn,settings.duration);
			
			cur = next;
		};

		var calculateNext = function()
		{
			if (cur < (items.length - 1)) next = cur + 1;
			else next = 0;
		};
		
		var begin = function(itemoneDisplayTime) {
			if (!itemoneDisplayTime && itemoneDisplayTime !== 0) itemoneDisplayTime = settings.displayTime;
			
			setTimeout( function() { 
				doNext(); 
				intervalID = setInterval(doNext,settings.displayTime + settings.duration * 2); 
			}, itemoneDisplayTime);	
		};
		
		var stop = function() {
			clearInterval(intervalID);
		};
		
		begin();
	};
})(jQuery);
