/*
 * ntg_marquesina
 * written by Hrodrigu
 * http://www.newtenberg.com
 * 2011-10-20
 * GPL (GPL-LICENSE.txt) licenses.
 *
 * Built for jQuery library
 * Depends jqueryui when you use effects
 * http://jquery.com
 */


(function($){
    $.fn.ntg_marquesina = function(options){
        // default configuration properties
        var defaults = {
                clickEvent: true,
                hoverEvent: false,
                duration: 2000,
                animation: 500,
                auto: true,
                currentClass: 'current',
                controlsClass: 'controls',
                controlsForceNumeric: true,
                nextArrowText: '>>',
                nextArrowClass: 'next',
                prevArrowText: '<<',
                prevArrowClass: 'prev',
                playText:'play',
                pauseText:'pause',
                playClass:'play',
                pauseClass:'pause'
        };
        var options = $.extend(defaults, options);
        var current = 0;
        var total;
        this.each(function(){
            var obj = this;
            var sl = $(obj).children('div');
            total = sl.length;
            obj.salto_pagina = function(numero,play){
                obj.busy = true;
                clearTimeout(obj.timeout);
                numero = numero % total;
                $(obj).children("div:eq(" + current + ")").hide("fade",{},options.animation,
                    function(){
                        obj.setCurrent(numero);
                        $(obj).children('div:eq(' +numero + ')')
                            .show("fade",{},options.animation,
                                function(){
                                    if(play){
                                        obj.play();
                                    }
                                    obj.clicked = false;
                                    obj.busy = false;
                                });
                    });
                current = numero;
                };
            obj.siguiente_pagina = function(play){
                if(typeof(play) == 'undefined'){obj.pause();}
                obj.salto_pagina(current + 1,(typeof(play) != 'undefined'?true:false));
            };
            obj.anterior_pagina = function(){
                obj.pause();
                obj.salto_pagina(current - 1);
            };
            obj.play = function(){
                obj.timeout = setTimeout(function(){
                    obj.siguiente_pagina(true);
                    }, options.duration);
                $('span.boton a' ,obj)
                    .text(options.pauseText)
                    .removeClass(options.playClass)
                    .addClass(options.pauseClass);
            };
            obj.pause = function(){
                clearTimeout(obj.timeout);
                $('span.boton a' ,obj)
                    .text(options.playText)
                    .removeClass(options.pauseClass)
                    .addClass(options.playClass);
            };
            obj.setCurrent = function(numero){
                        $("ul." + options.controlsClass +" > li ",obj).removeClass(options.currentClass);
                        $("ul." + options.controlsClass +" > li:eq(" + numero + ") ",obj).addClass(options.currentClass);
            };
            /* flechas anterio y siguiente */
            $(obj).prepend('<span class="' + options.nextArrowClass + '"><a href="#">'+ options.nextArrowText + '</a></span>');
            $(obj).prepend('<span class="' + options.prevArrowClass + '"><a href="#">'+ options.prevArrowText + '</a></span>');
            $("span."+options.prevArrowClass+" a",obj)
                .click(function(){
                            if(!obj.clicked && !obj.busy){
                                obj.clicked = true;
                                obj.anterior_pagina();
                            }
                            return false;
                });
            $("span."+options.nextArrowClass+" a",obj)
                .click(function(){
                            if(!obj.clicked && !obj.busy){
                                obj.clicked = true;
                                obj.siguiente_pagina();
                            }
                            return false;
                });

            /*  creacion lista de navegacion */
            var lista;
            if($("ul." + options.controlsClass ,obj).length == 0){
                var lista = '<ul class="'+ options.controlsClass + '">';
                for(var i=1;i<=total;i++){
                    lista += '<li class="item' + i + (i==0 ? ' '+options.currentClass : '') + '"><a href="#" title="' + i +'">' + i + '</a></li>';
                }
                lista+='</ul>';
            }else{
                var lista = $("ul." + options.controlsClass ,obj);
                $('a',lista).each(function(i){
                        $(this).attr('title',$(this).text());
                        if(options.controlsForceNumeric){$(this).text(i+1);}
                    });
                lista.detach();
            }
            /* boton play pause */
            $(obj).append('<span class="boton"><a href="#" class="' + (options.auto ? options.pauseClass : options.playClass) + '">' + (options.auto ? options.pauseText : options.playText) +'</a></span>');
            if(options.auto){
                $('span.boton a' ,obj).click(
                        function(){
                            if($(this).hasClass(options.pauseClass)){
                                obj.pause();
                            }else{
                                obj.play();
                            }
                        }
                    );
            }else{
                $('span.boton a' ,obj).click(
                        function(){
                            if($(this).hasClass(options.pauseClass)){
                                obj.pause();
                            }else{
                                obj.play();
                            }
                        }
                );
            }
            /*  se agreaga  lista de navegacion */
            $(obj).append(lista);
            $("ul." + options.controlsClass + " > li > a", obj)
                .each(function(index){
                    if(options.hoverEvent){
                        $(this).hover(function(){
                            if(!obj.clicked && !obj.busy){
                            obj.pause();
                            obj.salto_pagina(index);
                            }
                            return false;
                        });
                    }
                    if(options.clickEvent){
                        $(this).click(function(){
                            if(!obj.clicked && !obj.busy){
                                obj.clicked = true;
                                obj.pause();
                                obj.salto_pagina(index);
                            }
                            return false;
                        });
                        }
                });
            /* la partida */
            $(obj).children('div').hide();
            $(obj).children('div:eq(0)')
                .show("fade",{}, options.animation,
                    function(){
                        if(options.auto){
                            obj.play();
                        }
                        obj.setCurrent(0);
                    });

        });
    };
})(jQuery);


