/**
 * @author Stéphane Roucheray 
 * @extends jquery
 *
 + Modificado por =mega=, compatible para cantidad de elementos menor a la cantidad visible.
 */


jQuery.fn.carousel = function(previous, next, options){
	var sliderList = jQuery(this).children()[0];
	
	if (sliderList) {
		var elmnts = jQuery(sliderList).children();
		if(elmnts.length > 0){
			var increment = jQuery(sliderList).children().outerWidth("true"),
			numElmts = elmnts.length,
			sizeFirstElmnt = increment,
			shownInViewport = Math.ceil(jQuery(this).width() / sizeFirstElmnt),
			firstElementOnViewPort = 1,
			isAnimating = false;
			
			jQuery(sliderList).css('width', (numElmts + shownInViewport) * increment + increment + "px");
	
			for(i = 0; i < shownInViewport; i++){
				jQuery(sliderList).append(jQuery(elmnts[i % numElmts]).clone());
			}
		
			jQuery(previous).click(function(event){
				if (!isAnimating) {
					if (firstElementOnViewPort == 1) {
						jQuery(sliderList).css('left', "-" + numElmts * sizeFirstElmnt + "px");
						firstElementOnViewPort = numElmts;
					}
					else {
						firstElementOnViewPort--;
					}
					
					jQuery(sliderList).animate({
						left: "+=" + increment,
						y: 0,
						queue: true
					}, "swing", function(){isAnimating = false;});
					isAnimating = true;
				}
				
			});
		
			jQuery(next).click(function(event){
				if (!isAnimating) {
					if (firstElementOnViewPort > numElmts) {
						firstElementOnViewPort = 2;
						jQuery(sliderList).css('left', "0px");
					}
					else {
						firstElementOnViewPort++;
					}
					jQuery(sliderList).animate({
						left: "-=" + increment,
						y: 0,
						queue: true
					}, "swing", function(){isAnimating = false;});
					isAnimating = true;
				}
			});
		}
	}
};
