(function($) {
    $.fn.promoSlider = function (options) {
        var defaults = {
        };
	
        var settings = $.extend(true, defaults, options);
	var timer;
	var temporisation = 7000; // (ms), '0' to stop

        return this.each(function() {
            var slider = $(this);
            var sliderHover = $('.sliderHover', slider);
            var sliderContainer = $('.sliderContainer', slider);
            var sliderNextBtn = $('.imgNext .imgNext-image', sliderHover);
            var sliderPrevBtn = $('.imgPrev .imgPrev-image', sliderHover);
            var isMoving = false;

            initializeElts();
            function initializeElts()
            {
                sliderHover.height(slider.height());             
				$('.imgPrev', sliderHover).click(function(){
                    displayPrev();
                    clearInterval(timer);
                    if (temporisation > 0) timer = setInterval(function() { displayNext(); }, temporisation);
                });

                $('.imgNext', sliderHover).click(function(){
                    displayNext();
                    clearInterval(timer);
                    if (temporisation > 0) timer = setInterval(function() { displayNext(); }, temporisation);
                });
                
                var i = 0;
                var liElt = $('ul li', sliderContainer);
                var pager = $('.pager', sliderHover);
                for (; i < liElt.size(); ++i){
                    var link = $('<a href="#"></a>');
                    pager.append(link);
                }
                
                $('a', pager).click(function(){
                    if ($('a.active', pager).index() != $(this).index())
                    {
                        loadVisuel($(this).index());
                        clearInterval(timer);
                        if (temporisation > 0) timer = setInterval(function() { displayNext(); }, temporisation);
                    }
                    return (false);
                })
                loadVisuel(0);
            }

            function    displayNext()
            {
                var nextIndex = $('ul li.active', sliderContainer).index() + 1;

                if (nextIndex < $('ul li', sliderContainer).size())
                    loadVisuel(nextIndex);
                else loadVisuel(0);
            }

            function    displayPrev()
            {
                var prevIndex = $('ul li.active', sliderContainer).index() - 1;

                if (prevIndex >= 0)
                    loadVisuel(prevIndex);
                else loadVisuel($('ul li', sliderContainer).size()-1); 
            }

            function    loadVisuel(id)
            {
                if (isMoving)
                    return;
                var element = $('ul li:eq(' + id + ')', sliderContainer);
                if (element.size() > 0)
                {
                    var activeElt = $('ul li.active', sliderContainer);
                    if (activeElt.size() != 0)
                    {
                        activeElt.removeClass('active');
                        $('.pager a.active',sliderHover ).removeClass('active');
                        isMoving = true;
                        activeElt.fadeOut('fast', function(){
                            element.fadeIn('fast', function(){
                                isMoving = false;
                            });
                            $('.imgTitle', sliderHover).html($('.title', element).html());

                            if ($('.title', element).html()) $('.imgTitle', sliderHover).removeClass('hide');
                            else $('.imgTitle', sliderHover).addClass('hide');

                            element.addClass('active');
                            $('.pager a:eq(' + id + ')', sliderHover).addClass('active');
                        });
                    } else {
                        isMoving = true;
                        element.fadeIn('fast', function(){
                            isMoving = false;
                        });
                        $('.imgTitle', sliderHover).html($('.title', element).html());

                        if ($('.title', element).html()) $('.imgTitle', sliderHover).removeClass('hide');
                        else $('.imgTitle', sliderHover).addClass('hide');

                        element.addClass('active');
                        $('.pager a:eq(' + id + ')', sliderHover).addClass('active');
                    }
                }
            }
            if (temporisation > 0) timer = setInterval(function() { displayNext(); }, temporisation);
        });
    }
})(jQuery)

