jQuery(function($) {

    /**
    // Plugin carousel
    **/
    $.fn.carouselSlide = function(params) {
    
        // Fusionner les paramètres par défaut et ceux de l'utilisateur
        params = $.extend({
            manual: true,
            auto: false,
            speed: 500,
            frequency: 3000
        }, params);
        
        // Traverser tous les noeuds.
        this.each(function() {
            var $t            = $(this);
            var $item         = $t.find('.group');
            var $slider       = $item.parents('.slider');
            var $item_length  = $item.length;
            var $item_width   = $item.outerWidth(true);
            var $anim_active  = false;
            var $slider_width = ($item_length + 1) * $item_width;
            
            // on fixe la taille du slider
            $slider.css("width",$slider_width+"px");
            
            /*
            // Debug
            info('Variables initiales :');
            log('Objets selectionnés : ' + $t);
            log('Eléments de listes : ' + $item);
            log('Nombre d\'éléments liste : ' + $item_length);
            log('Largeur du slider : ' + $slider_width + 'px');
            */
            
            // Autorise le déplacement manuel
            if(params.manual === true) {
                // Ajoute et gère le bouton précédent
                jQuery('<a>', {
                    className: 'prev',
                    href: '#',
                    click: function() {
                        carouselPrev();
                        return false;
                    }
                }).prependTo($t);
                
                // Ajoute et gère le bouton suivant
                jQuery('<a>', {
                    className: 'next',
                    href: '#',
                    click: function() {
                        carouselNext();
                        return false;
                    }
                }).appendTo($t);
            }
            
            // Autorise le déplacement automatique
            if(params.auto === true) {
            
                var interval;
                
                function autoSlide() {
                    interval = setInterval(function() {
                        carouselNext();
                    }, params.frequency);
                }
                autoSlide();
                
                $t.mouseenter(function(){ 
                    clearInterval(interval);
                });
                $t.mouseleave(function(){ 
                    autoSlide(); 
                });
            }
            
            // Item Précédent
            function carouselPrev() {
                if (!$anim_active) {
                
                    $anim_active = true;
                    
                    $slider.find(".group:last").clone(true).insertBefore($slider.find(".group:first"));
                    $slider.css("left", "-"+$item_width+"px");
                    $slider.animate({"left": "+="+$item_width+"px"}, params.speed, "swing", function() {
                        $slider.find(".group:last").remove();
                        $anim_active = false;
                    });
                }
            }
            
            // Item Suivant
            function carouselNext() {
                if (!$anim_active) {
                
                    $anim_active = true;

                    $slider.find(".group:first").clone(true).insertAfter($slider.find(".group:last"));
                    $slider.animate({"left": "-="+$item_width+"px"}, params.speed, "swing", function() {
                        $slider
                            .find(".group:first").remove().end()
                            .css("left", "0px");
                        $anim_active = false;
                    });
                }
            }
        });
        
        // Permettre le chaînage par jQuery
        return this;
        
    };

}); /* jQuery end */
