(function( $ ){
    $.fn.carrousel = function(options) {
        
        var settings = {
            velocidad: 8000,
            auto: true,
            slides: "ul:first",
            lista: false,
            player: false,
            fade: true
        }
        
        var timeout;
        
        if(options)
            $.extend(settings, options);
        
        var methods = {
            pause: function(){
                settings.auto = false;
                clearTimeout(timeout);
            },
            play: function(div){
                settings.auto = true;
                methods.mostrarSiguiente(div);
            },
            getLista: function(div){
                if(settings.lista)
                    return $(settings.lista,div);
                
                return false;
            },
            getSlides: function(div){
                return $(settings.slides,div);
            },
            getTotal: function(div){
                return methods.getSlides(div).children('li').length;
            },
            mostrarSlide: function(div,num){
                var slides = methods.getSlides(div);
                var lista = methods.getLista(div);
                if(settings.fade){
                    $('li.current', slides).fadeOut('slow',function(){
                        $(this).hide();
                    }).removeClass('current');
                    $('li:eq('+num+')', slides).fadeIn('slow').addClass('current');
                } else {
                    $('li.current', slides).hide().removeClass('current');
                    $('li:eq('+num+')', slides).show().addClass('current');
                }
                
                if(lista){
                    $('li.current', lista).removeClass('current');
                    $('li:eq('+num+')', lista).addClass('current');
                }
            },
            mostrarSiguiente: function(div){
                var slides = methods.getSlides(div);
                var total = methods.getTotal(div);
                var num = $('li', slides).index($('li.current', slides));

                num++;
                if(num == total)
                    num = 0;

                methods.mostrarSlide(div,num);
                
                if(settings.auto)
                    timeout = setTimeout(function(){methods.mostrarSiguiente(div)}, settings.velocidad);
            },
            mostrarAnterior: function(div){
                var slides = methods.getSlides(div);
                var total = methods.getTotal(div);
                var num = $('li', slides).index($('li.current', slides));

                num--;
                if(num == -1)
                    num = total-1;

                methods.mostrarSlide(div,num);
                
                if(settings.auto)
                    timeout = setTimeout(function(){methods.mostrarSiguiente(div)}, settings.velocidad);
            }
        }
        
        return this.each(function(){
        
            var div = this;
            var slides = methods.getSlides(div);
            var lista = methods.getLista(div);
            
            $('li:first', slides).addClass('current');
            
            if(settings.auto)
                methods.mostrarSiguiente(div);
            
            if(settings.player){
                var player = $(settings.player);
                $('a:first', player).click(function(){
                    methods.pause();
                    methods.mostrarAnterior(div);
                });
                $('a:eq(1)', player).click(function(){
                    if(settings.auto)
                        methods.pause();
                    else
                        methods.play(div);
                });
                $('a:last', player).click(function(){
                    methods.pause();
                    methods.mostrarSiguiente(div);
                });
            }

            if(lista){
                $('li:first', lista).addClass('current');
                $('li', lista).click(function(){
                    methods.pause();
                    var num = $('li', lista).index($(this));
                    methods.mostrarSlide(div, num);
                });
            }
        });
    };
})( jQuery );
