/**
 * @author Stéphane Roucheray 
 * @extends jquery
 */


jQuery.fn.carousel = function(previous, next, options){
    var sliderList = jQuery(this).children()[0];
	
    if (sliderList) {
	var increment = jQuery(sliderList).children().outerHeight("true"),
	elmnts = jQuery(sliderList).children(),
	numElmts = elmnts.length,
	sizeFirstElmnt = increment,
	shownInViewport = Math.round(jQuery(this).height() / sizeFirstElmnt),
	firstElementOnViewPort = 1,
	isAnimating = false;
		
	for (i = 0; i < shownInViewport; i++) {
	    jQuery(sliderList).css('height',(numElmts+shownInViewport)*increment + increment + "px");
	    jQuery(sliderList).append(jQuery(elmnts[i]).clone());
	}
		
	jQuery(previous).click(function(event){
	    if (!isAnimating) {
		if (firstElementOnViewPort == 1) {
		    jQuery(sliderList).css('top', "-" + numElmts * sizeFirstElmnt + "px");
		    firstElementOnViewPort = numElmts;
		}
		else {
		    firstElementOnViewPort--;
		}
				
		jQuery(sliderList).animate({
		    top: "+=" + increment,
		    x: 0,
		    queue: true
		}, "swing", function(){
		    isAnimating = false;
		});
		isAnimating = true;
	    }
			
	});
		
	jQuery(next).click(function(event){
	    if (!isAnimating) {
		if (firstElementOnViewPort > numElmts) {
		    firstElementOnViewPort = 2;
		    jQuery(sliderList).css('top', "0px");
		}
		else {
		    firstElementOnViewPort++;
		}
		jQuery(sliderList).animate({
		    top: "-=" + increment,
		    x: 0,
		    queue: true
		}, "swing", function(){
		    isAnimating = false;
		});
		isAnimating = true;
	    }
	});
    }
};

