(function($) {
	$.fn.caroSello = function(options) {
		return this.each(function() {
			var opts 			= $.extend({}, $.fn.caroSello.defaults, options);
			var $ul 			= $(this);
			var $items 			= $("li", $ul);
			var totalItems		= $items.length;
			var onPause			= false;
			var itemWidth		= $items.outerWidth();

			if (opts.scrollItems == 0) opts.scrollItems = opts.visibleItems;
			for(var a = 0; a < opts.visibleItems; a++){
				$ul.append($($items[a]).clone());
			}
			var contatore = 0; 
			
			$ul
				.bind("forward", function() {
					if ($ul.is(':animated')) 	return false;
					if (onPause) 				return false;
					contatore++;
					if(contatore==totalItems+1){
						contatore = 1;
						$ul.css('left','0');
					}
					$ul.animate({ 
							left	: -(contatore*itemWidth*opts.scrollItems)
						}, { 
							duration: opts.scrollSpeed, 
							easing	: opts.scrollEffect
						}
					);							
		
					setTimeout(function() {
						$ul.trigger("forward");
					}, opts.pauseDuration);
					
				})
				.bind("backward", function() {
					if ($ul.is(':animated')) 	return false;
					if (onPause) 				return false;
					contatore--;
					if(contatore==-1){
						contatore = totalItems-1;
						$ul.css('left', -(itemWidth*totalItems));
					}
					$ul.animate({ 
							left	: -(contatore*itemWidth*opts.scrollItems)
						}, { 
							duration: opts.scrollSpeed, 
							easing	: opts.scrollEffect
						}
					);

					setTimeout(function() {
						$ul.trigger("forward");
					}, opts.pauseDuration);
				
				})
				.bind("next", function() {
					$ul.trigger("play").trigger("forward").trigger("pause");
				})
				.bind("prev", function() {
					$ul.trigger("play").trigger("backward").trigger("pause");
				})
				.bind("pause", function() {
					onPause = true;
				})
				.bind("play", function() {
					onPause = false;
					setTimeout(function() {
						$ul.trigger("forward");
					}, opts.pauseDuration);
				})
				.css({
					top: 0,
					left: 0,
					position: 'absolute'
				})
				.wrap('<div class="carosello_wrapper" />')
			.parent()
			.css({ 
				width		: (itemWidth + $items.css('marginLeft') + $items.css('marginRight')) * opts.visibleItems,
				height		: $ul.outerHeight(),
				position	: "relative",
				overflow	: "hidden"
			});

			if (opts.pauseOnHover) {
				$ul.hover(
					function() { $ul.trigger("pause"); 	},
					function() { $ul.trigger("play"); 	}
				);
			}

			//	of via prev- en/of next-buttons
			if (opts.next != null || opts.prev != null) {
				if (opts.next != null) {
					opts.next
						.click(function() {
							$ul.trigger("next");
							return false;
						})
						.hover(
							function() { $ul.trigger("pause"); 	},
							function() { $ul.trigger("play"); 	}
						);
				}
				if (opts.prev != null) {
					opts.prev
						.click(function() {
							$ul.trigger("prev");
							return false;
						})
						.hover(
							function() { $ul.trigger("pause"); 	},
							function() { $ul.trigger("play"); 	}
						);
				}
			}
			//	of via auto-play
			if (opts.pauseDuration > 0) {
				setTimeout(function() {
					$ul.trigger("forward");
				}, opts.pauseDuration);
			}
		});
	}
	$.fn.caroSello.defaults = {
		visibleItems	: 4,
		scrollItems		: 0,
		scrollEffect	: 'easeInOutQuad',
		scrollSpeed		: 500,
		next			: null,
		prev			: null,
		pauseDuration	: 2500,
		pauseOnHover	: false,
		before			: null, 
		after			: null
	}
})(jQuery);
