/*
    --> Web Table

    Plugin para a geração de uma tabela com paginação
    utilizando jquery sem a necessidade de novos bindings

    Por: Stefan Espindola Mielke
    Data: 29/03/2011
    Empresa: Web Prêmios
*/
(function($) {

    var methods = {
        gerarBotaoCentro: function(pagina, quantidadePaginas, quantidadePaginacao) {
            return $(this).each(function() {
                var html = "";
                var htmlPagina = "";

                var paginaAtual = pagina;

                paginaAtual -= (quantidadePaginacao / 2.0);

                paginaAtual = parseInt(paginaAtual);

                if (paginaAtual + quantidadePaginacao > quantidadePaginas) {
                    paginaAtual = quantidadePaginas - quantidadePaginacao + 1;
                }

                if (paginaAtual <= 0) {
                    paginaAtual = 1;
                }

                /*if (paginaAtual > 1) {
                html = "...";
                }*/

                var counter = paginaAtual;                
                while (counter < (quantidadePaginacao + paginaAtual) && counter <= quantidadePaginas) {

                    if (counter == pagina) {
                        imgPagina = "img_buscapremiada_item_o";
                    }
                    else {
                        imgPagina = "img_buscapremiada_item";
                    }

                    html = html
                            + "<table cellspacing='0' cellpadding='0' border='0' style='float:left'><tbody><tr><td align='center'>"
                            + "<input type='image' style='border-width:0px;' onclick='$(this).webtable(\"goToPage\", " + counter
                            + ");return false;' src='images/layout/spacer.gif' class='" + imgPagina + "'></td></tr>"
                            + "<tr><td align='center' style='height: 19px'><a id='wtA_" + counter + "' href='#' class='txt_pagina' onclick='$(this).webtable(\"goToPage\", " + counter
                            + ");return false;'>" + counter + "</a>&nbsp;</td></tr></tbody></table>";
                    counter++;

                }

                /*if (counter - 1 < quantidadePaginas) {
                html = html + "...";
                }*/

                htmlPagina = "<table id='tblPaginacao' cellspacing='0' cellpadding='0' border='0' style='width:100%'><tbody><tr><td align='center' style='padding-top:20px'><table cellspacing='0' cellpadding='0' border='0'><tbody><tr><td align='center' valign='top'><img height='44px' width='44px' class='img_buscapremiada_01' src='img/spacer.gif' alt=''></td><td valign='top' rowspan='1'>";
                htmlPagina += html + "</td><td valign='top'><img height='41px' width='42px' class='img_buscapremiada_02' src='img/spacer.gif' alt='sca'></td>";
                htmlPagina += "</tr></tbody></table></td></tr></tbody></table>";
                $(".wtBotaoCentro").html(htmlPagina);

                // Colocando a classe wtAAtivo na página atual
                $("#wtA_" + pagina.toString()).addClass("wtAAtivo");
            });
        },
        ajustarBotoesPaginacao: function(pagina, paginasTotal) {
            $(".wtProximo").removeClass("wtAAtivo");
            $(".wtAnterior").removeClass("wtAAtivo");
            if (pagina == 1) {
                $(".wtAnterior").addClass("wtAAtivo");
            }
            if (pagina == paginasTotal) {
                $(".wtProximo").addClass("wtAAtivo");
            }
        },
        goToPage: function(pagina) {
            // Verificando a última página
            data = $(".webTable").first().data('webtable');
            if (pagina != data.paginaAtual) {
                //alert($(this).parent().parent().parent().parent().parent().html());
                //$("input", "#tblPaginacao").removeClass("img_buscapremiada_item_o").addClass("img_buscapremiada_item");

                return $(this).each(function() {
                    // Escondo a que estiver ativa
                    $(".wtAtiva").removeClass("wtAtiva").hide();
                    // Pego a página a ser mostrada
                    $(".wtPag_" + pagina.toString()).addClass("wtAtiva").show();

                    // Ajusto os botões
                    methods.ajustarBotoesPaginacao(pagina, data.paginasTotal);

                    // Ajustando a classe do Centro
                    $(".wtCentro").removeClass("wtAAtivo");
                    $("#wtA_" + pagina.toString()).addClass("wtAAtivo");

                    methods.gerarBotaoCentro(pagina, data.paginasTotal, data.quantidadePaginacao);

                    $(".webTable").first().data('webtable', { paginaAtual: pagina, paginasTotal: data.paginasTotal, quantidadePorPagina: data.quantidadePorPagina, quantidadePaginacao: data.quantidadePaginacao })
                });
            }

            return $(this);
        },
        init: function(options) {

            // Settings
            var settings = {
                quantidadePorPagina: 10,
                textoClass: 'txtForm',
                textoAnterior: 'Anterior',
                textoProximo: 'Pr&oacute;ximo',
                quantidadePaginacao: 20,
                pularHeader: true
            };

            // Marcando a tag
            $(this).addClass('webTable');

            // Variáveis internas
            var quantidadePaginas;
            var counterPaginas;
            var bEhHeader;

            // Verificando a quantidade de páginas
            // Colocando as classes na tabela de acordo com as páginas
            return $(this).each(function() {
                // Ajustando as settings passadas
                if (options) {
                    $.extend(settings, options);
                }

                counterPaginas = 0;
                quantidadePaginas = 1;
                bEhHeader = settings.pularHeader;

                $("tr", this).each(function() {
                    // Pulo o header
                    if (bEhHeader) {
                        bEhHeader = false;
                    }
                    else {
                        $(this).addClass("wtPag_" + quantidadePaginas.toString()); // Marcador da página
                        $(this).addClass("wtTr"); // Marcador geral
                        counterPaginas++;

                        // Fim da página
                        if (counterPaginas >= settings.quantidadePorPagina) {
                            quantidadePaginas++;
                            counterPaginas = 0;
                        }
                    }
                });

                // Corrigindo o contador caso a última página não tenha dados
                if (counterPaginas == 0) {
                    quantidadePaginas--;
                }

                // Aparecendo somente a página inicial
                $(".wtTr", this).hide();
                $(".wtPag_1", this).addClass("wtAtiva").show();

                // Gerando a div final
                $(this).after(
                //"<div class='wtRodape " + settings.textoClass + "'><div class='wtBotaoAnterior'><a href='#' class='wtAnterior wtAAtivo'>" + settings.textoAnterior + "</a></div>"
                    "<div class='wtRodape " + settings.textoClass + "'>"
                    + "<div class='wtBotaoCentro'></div></div>"
                //+ "<div class='wtBotaoAvancar'><a href='#' class='wtProximo wtAAtivo'>" + settings.textoProximo + "</a></div></div>"
                );

                // Bindando os clicks
                $(".wtAnterior").click(function() {
                    $(this).webtable("wtRetornar");
                    return false;
                });
                $(".wtProximo").click(function() {
                    $(this).webtable("wtAvancar");
                    return false;
                });

                // Dados acessados externamente
                $(this).data('webtable', { paginaAtual: 1, paginasTotal: quantidadePaginas, quantidadePorPagina: settings.quantidadePorPagina, quantidadePaginacao: settings.quantidadePaginacao, quantidadePaginacao: settings.quantidadePaginacao });

                // Gera o botão para a primeira
                methods.gerarBotaoCentro(1, quantidadePaginas, settings.quantidadePaginacao);
                // Ajusto os botões
                methods.ajustarBotoesPaginacao(1, quantidadePaginas);
            });
        },
        wtRetornar: function() {
            return $(this).each(function() {
                data = $(".webTable").first().data('webtable');
                if (data.paginaAtual > 1) {
                    methods.goToPage(data.paginaAtual - 1);
                }
            });
        },
        wtAvancar: function() {
            return $(this).each(function() {
                data = $(".webTable").first().data('webtable');
                if (data.paginaAtual < data.paginasTotal) {
                    methods.goToPage(data.paginaAtual + 1);
                }
            });
        }
    };

    $.fn.webtable = function(method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.webtable');
        }
    };
})(jQuery);
