﻿/*carousel infinite modificato*/

jQuery.fn.carousel = function(previous, next, options) {
    var sliderList = jQuery(this).children()[0];
    if (sliderList) {
        var increment = jQuery(sliderList).children().outerWidth("true");
        var elmnts = jQuery(sliderList).children();
        var numElmts = elmnts.length;
        var sizeFirstElmnt = increment;
        var shownInViewport = Math.round(jQuery(this).width() / sizeFirstElmnt);
        var firstElementOnViewPort = 1;
        var elementsDisplayed = shownInViewport;
        var isAnimating = false;

        //Solo se il numero di elementi è maggiore di shownInViewport. Altrimenti vengono disabilitati next e prev
        if (numElmts > shownInViewport) {
            for (i = 0; i < shownInViewport; i++) {
                jQuery(sliderList).css('width', (numElmts + shownInViewport) * increment + increment + "px");
                jQuery(sliderList).append(jQuery(elmnts[i]).clone());
            }

            if (firstElementOnViewPort == 1)
                jQuery('#' + previous).addClass('prevDisabled')
        		.removeClass('prevEnable');

            jQuery('#' + previous).click(function(event) {
                if (!isAnimating && firstElementOnViewPort > 1) {
                    jQuery('#' + previous).addClass('prevEnable')
                	.removeClass('prevDisabled');
                    jQuery('#' + next).addClass('nextEnable')
                .removeClass('nextDisabled');
                    /*firstElementOnViewPort = firstElementOnViewPort - 1;
                    jQuery(sliderList).animate({
                    left: "+=" + increment,
                    y: 0,
                    queue: true
                    }, "swing", function() { isAnimating = false; });
                    isAnimating = true;*/
                    firstElementOnViewPort = firstElementOnViewPort - shownInViewport;
                    if (firstElementOnViewPort <= shownInViewport) {
                        incr = increment * (elementsDisplayed - shownInViewport);
                        elementsDisplayed = shownInViewport;
                        firstElementOnViewPort = 1;
                    }
                    else {
                        incr = increment * shownInViewport;
                        elementsDisplayed = elementsDisplayed - shownInViewport;
                    }
                    jQuery(sliderList).animate({
                        left: "+=" + incr,
                        y: 0,
                        queue: true
                    }, 'swing', function() { isAnimating = false; });
                    isAnimating = true;
                }
                if (firstElementOnViewPort == 1) {
                    jQuery('#' + previous).addClass('prevDisabled')
        		.removeClass('prevEnable');
                }
            });

            jQuery('#' + next).click(function(event) {
                var incr;
                if (!isAnimating && firstElementOnViewPort <= numElmts - shownInViewport) {
                    jQuery('#' + previous).addClass('prevEnable')
                .removeClass('prevDisabled');
                    /*firstElementOnViewPort = firstElementOnViewPort + 1;
                    jQuery(sliderList).animate({
                    left: "-=" + increment,
                    y: 0,
                    queue: true
                    }, "swing", function() { isAnimating = false; });
                    isAnimating = true;*/
                    firstElementOnViewPort = firstElementOnViewPort + shownInViewport;
                    if (firstElementOnViewPort >= (numElmts - shownInViewport + 1)) {
                        incr = increment * (numElmts - elementsDisplayed);
                        elementsDisplayed = numElmts;
                        firstElementOnViewPort = numElmts;
                    }
                    else {
                        incr = increment * shownInViewport;
                        elementsDisplayed = elementsDisplayed + shownInViewport;
                    }
                    jQuery(sliderList).animate(
                    { left: "-=" + incr,
                        y: 0,
                        queue: true
                    }, 'swing', function() { isAnimating = false; });
                    isAnimating = true;
                }
                else {
                    //Viene riportato al primo elemento
                    jQuery(sliderList).animate({
                        left: 0,
                        y: 0,
                        queue: true
                    }, 'swing', function() { isAnimating = false; });
                    isAnimating = true;
                    firstElementOnViewPort = 1;
                    elementsDisplayed = shownInViewport;
                    jQuery('#' + previous).addClass('prevDisabled')
                .removeClass('prevEnable');
                }
            });
        }
        else {
            jQuery('#' + previous).addClass('prevDisabled');
            jQuery('#' + next).addClass('nextDisabled');
        }
    }
};