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,
            vertical: false
        }, params);
        
        // Traverser tous les noeuds.
        this.each(function() {
            var $t            = $(this);
            var $item         = $t.find('.item');
            var $slider       = $item.parents('.slider');
            var $item_length  = $item.length;
            var $anim_active  = false;

            // on fixe la taille du slider
            if(params.vertical === true) {
                var $direction = 'top';
                var $item_size   = $item.outerHeight(true);
                $slider.css("height",($item_length + 1) * $item_size+"px");
            }
            else {
                var $direction = 'left';
                var $item_size   = $item.outerWidth(true);
                $slider.css("width",($item_length + 1) * $item_size+"px");
                $slider.parent().css("height",($item.outerHeight(true))+"px");
            }
            
            
            if ( $item_length > 1 )
            {
                // Autorise le déplacement manuel
                if(params.manual === true) {
                    // Ajoute et gère le bouton précédent
                    jQuery('<a>', {
                        className: 'prev',
                        href: '#',
                        title: 'Précédent',
                        html: '<span>Précédent</span>',
                        click: function() {
                            carouselPrev();
                            return false;
                        }
                    }).prependTo($t);
                    
                    // Ajoute et gère le bouton suivant
                    jQuery('<a>', {
                        className: 'next',
                        href: '#',
                        title: 'Suivant',
                        html: '<span>Suivant</span>',
                        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(".item:last").clone(true).insertBefore($slider.find(".item:first"));
                    $o = {};
                    $o[$direction] = "+="+$item_size+"px";
                    $slider.css($direction, "-"+$item_size+"px");
                    $slider.animate($o, params.speed, "swing", function() {
                        $slider.find(".item:last").remove();
                        $anim_active = false;
                    });
                }
            }
            
            // Item Suivant
            function carouselNext() {
                if (!$anim_active) {
                
                    $anim_active = true;

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

}); /* jQuery end */
