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('.item');
            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: '#',
                    title: 'Précédent',
                    click: function() {
                        carouselPrev();
                        return false;
                    }
                }).prependTo($t);

                // Ajoute et gère le bouton suivant
                jQuery('<a>', {
                    className: 'next',
                    href: '#',
                    title: 'Suivant',
                    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"));
                    $slider.css("left", "-"+$item_width+"px");
                    $slider.animate({"left": "+="+$item_width+"px"}, 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"));
                    $slider.animate({"left": "-="+$item_width+"px"}, params.speed, "swing", function() {
                        $slider
                            .find(".item:first").remove().end()
                            .css("left", "0px");
                        $anim_active = false;
                    });
                }
            }
        });

        // Permettre le chaînage par jQuery
        return this;

    };

}); /* jQuery end */
