(function($) {
    $.fn.visionneuse = function (options){
        
        if(this.length > 1) return false;

        var defaults = {
            pauseBetweenSlides : 8
        };
        options =  $.extend(defaults, options);

        var slidesElem = $("#bannerWrap");
        var slidesMenuElem = $("#bannerMenu");
        var nbSlides, currentSlideElem, currentSlideIndex, slidesItemElem,
        menuItemsElem, slidesInterval, slideTimeout, isRunning, isInMotion;

        // Méthodes
        var initialize = function(){
            
            currentSlideIndex = 0;
            isRunning = true;
            isInMotion = false;
            slidesItemElem = $("div.bannerInner", slidesElem);
            menuItemsElem = $("li", slidesMenuElem);
            nbSlides = slidesItemElem.length;

            // Mouseover sur le wrapper
            slidesElem.hover(function(){
                isRunning = false;
                clearInterval(slidesInterval);
            }, function(){
                isRunning = true;
                slidesInterval = window.setInterval(function(){
                    if(!isInMotion) {
                        clearInterval(slidesInterval);
                        nextSlide();
                    }
                }, 25);
            });

            slidesItemElem.hide();
            menuItemsElem.find("a")
            .removeClass("current")
            .bind("click.visionneuse", function(e){
                e.preventDefault();
                clickSlide( menuItemsElem.index($(this).parent()) );
            });
            // Démarre la visionneuse !
            showSlide();
        },
        showSlide = function(){
            killTimeout();

            // Affiche le bouton du menu
            highlighMenuItem( currentSlideIndex );

            // Cache tout
            slidesItemElem.hide();

            currentSlideElem = slidesItemElem.eq(currentSlideIndex);
            var content = $(".bannerContent", currentSlideElem);
            $("h2,p,a", content).hide();

            startAnimation();
            
        },
        nextSlide = function(){
            currentSlideIndex++;
            if(currentSlideIndex==nbSlides) currentSlideIndex = 0;
            showSlide();
        },
        clickSlide = function(index){
            currentSlideIndex = index;
            showSlide();
        }
        startAnimation = function(){
            isInMotion = true;
            currentSlideElem.fadeIn(1000);
            waitAndCall(1050, animateTitle);
        },
        animateTitle = function(){
            var elem = getElement("h2");
            elem.slideDown(250);
            waitAndCall(500, animateText);
        },
        animateText = function(){
            var elem = getElement("p");
            elem.slideDown(250)
            waitAndCall(500, animateButton);
        },
        animateButton = function(){
            var elem = getElement("a");
            elem.fadeIn(300);
            waitAndCall(300+options.pauseBetweenSlides*1000, function(){
                isInMotion = false;
                if(isRunning) nextSlide();
            });
        },
        highlighMenuItem = function(index){
            menuItemsElem.find("a").removeClass("current");
            menuItemsElem.eq(index).find("a").addClass("current");
        },
        waitAndCall = function(ms, callback){
            slideTimeout = window.setTimeout(callback, ms);
        },
        killTimeout = function(){
            clearTimeout(slideTimeout);
        },
        getElement = function(element){
            return $(".bannerContent", currentSlideElem).find(element);
        };

        // Démarre le script
        initialize();
        
        /*return this.each(function() {
            
        });*/
    }
})(jQuery);
