 $(document).ready(function(){

     /** No IE as tabelas q ficam entre as tags <a> não funcionam
      *  Essa função resolve este problema
      */
     if( jQuery.browser.msie ){
         $( 'a > table' ).click( function(){
             var href = $.trim( $(this).parent().attr( 'href' ) );
             if( href.charAt( 0 ) != '#' && href != '' ){
                 location = $( 'base' ).attr( 'href' ) + href;
             }

         } );
     }

     /**
      * Validação e Máscara via definição de Banco e chamada JSON
      *
      * usage: <form model="ModelClass">
      * usage: name="modelFieldName"
      * usage: <input model="ModelClass">
      */
     var data = {"Adesao":{"nu_ano_exercicio":["Digits","NotEmpty"],"co_mantenedora":["Digits","NotEmpty"],"nu_cnpj":[["StringLength",0,14],"NotEmpty"],"ds_razao_social":[["StringLength",0,200],"NotEmpty"],"co_cidade":[["StringLength",0,15],"NotEmpty"],"co_uf":[["StringLength",0,15],"NotEmpty"],"ds_tipo_logradouro":[["StringLength",0,20],"NotEmpty"],"ds_logradouro":[["StringLength",0,100],"NotEmpty"],"ds_logradouro_comp":[["StringLength",0,156]],"ds_bairro":[["StringLength",0,70],"NotEmpty"],"ds_numero":[["StringLength",0,20]],"nu_cep":[["StringLength",0,8],"NotEmpty"],"co_natureza_juridica":[["StringLength",0,4],"NotEmpty"],"co_cnae_principal":[["StringLength",0,7],"NotEmpty"],"ds_email_mantenedora":["EmailAddress",["StringLength",0,100],"NotEmpty"],"vl_adesao_requerido":["Float"],"vl_adesao_calculado":["Float","NotEmpty"],"co_banco":["Digits","NotEmpty"],"co_agencia":["Digits","NotEmpty"],"nu_conta":[["StringLength",0,15]],"co_uf_agencia":[["StringLength",0,15],"NotEmpty"],"co_cidade_agencia":[["StringLength",0,15]],"vl_mensal_contribuicao_previdenciaria":["Float","NotEmpty"],"vl_mensal_imposto":["Float","NotEmpty"],"nu_ano_referencia_balanco":["Digits"],"vl_ativo_circulante":["Float","NotEmpty"],"vl_realizavel_curto_prazo":["Float","NotEmpty"],"vl_realizavel_longo_prazo":["Float","NotEmpty"],"vl_passivo_circulante":["Float","NotEmpty"],"vl_exigivel_longo_prazo":["Float","NotEmpty"],"vl_ativo_total":["Float","NotEmpty"],"vl_patrimonio_liquido":["Float","NotEmpty"],"vl_ativo_permanente":["Float","NotEmpty"],"co_situacao_adesao":["Digits","NotEmpty"],"dt_inicio_adesao":[["Date","YYYY-MM-dd"]],"dt_termino_adesao":[["Date","YYYY-MM-dd"]],"dt_inclusao":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"],"sg_mantenedora":[["StringLength",0,20]],"st_cadastro_rep_financeiro_alterado":[["StringLength",0,1],"NotEmpty"],"st_dados_financeiros_cadastrados":[["StringLength",0,1],"NotEmpty"],"st_dados_limite_cadastrados":[["StringLength",0,1],"NotEmpty"]},"ContatoTelefonico":{"co_adesao":["Digits"],"nu_telefone":[["StringLength",0,11],"NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"Cpsa":{"co_campus":["Digits","NotEmpty"],"co_situacao_cpsa":["Digits","NotEmpty"],"dt_inclusao":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"Documento":{"co_adesao":["Digits","NotEmpty"],"co_tipo_documento":["Digits","NotEmpty"],"ds_documento":["NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"],"dt_inicio_documento":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"dt_termino_documento":[["Date","YYYY-MM-dd H:i:s.u"]],"ds_extensao_arquivo":[["StringLength",0,3],"NotEmpty"]},"EstruturaCnae":{"co_subclasse":[["StringLength",0,9],"NotEmpty"],"ds_denominacao":[["StringLength",0,200]]},"MembroCpsa":{"co_cpsa":["Digits","NotEmpty"],"nu_cpf":[["StringLength",0,11],"NotEmpty"],"no_membro":[["StringLength",0,60],"NotEmpty"],"tp_representatividade":[["StringLength",0,1],"NotEmpty"],"tp_funcao":[["StringLength",0,1],"NotEmpty"],"nu_ddd":[["StringLength",0,2],"NotEmpty"],"nu_telefone":[["StringLength",0,10],"NotEmpty"],"nu_ddd_fax":[["StringLength",0,2]],"nu_fax":[["StringLength",0,10]],"ds_email":["EmailAddress",["StringLength",0,100],"NotEmpty"],"dt_inicio_representacao":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_representacao":[["Date","YYYY-MM-dd"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"NaturezaJuridica":{"co_natureza_juridica":[["StringLength",0,4],"NotEmpty"],"ds_natureza_juridica":[["StringLength",0,80],"NotEmpty"],"ds_qualificacao_responsavel":[["StringLength",0,200],"NotEmpty"]},"ParametroAlerta":{"nu_perc_alerta_financeiro_mantenedora":["Float","NotEmpty"],"nu_perc_alerta_financeiro_operador":["Float","NotEmpty"],"dt_inicio_vigencia":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_vigencia":[["Date","YYYY-MM-dd"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"ParametroCurso":{"nu_nota_minima_igc":["Digits", "NotEmpty"], "nu_nota_minima_ci":["Digits", "NotEmpty"], "nu_nota_minima_cc":["Digits","NotEmpty"],"nu_nota_minima_cpc":["Digits","NotEmpty"],"nu_nota_minima_enade":["Digits","NotEmpty"],"st_incluir_sem_conceito_cc":[["StringLength",0,1],"NotEmpty"],"st_incluir_sem_conceito_cpc":[["StringLength",0,1],"NotEmpty"],"st_incluir_sem_conceito_enade":[["StringLength",0,1],"NotEmpty"],"st_incluir_curso_nao_avaliado":[["StringLength",0,1],"NotEmpty"],"dt_inicio_vigencia":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_vigencia":[["Date","YYYY-MM-dd"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"ParametroFormula":{"ds_formula_capacidade_financ":[["StringLength",0,200],"NotEmpty"],"tp_alerta_capacidade_financ":[["StringLength",0,1],"NotEmpty"],"dt_inicio_vigencia":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_vigencia":[["Date","YYYY-MM-dd"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"ParametroOrcamento":{"nu_ano_exercicio":["Digits","NotEmpty"],"vl_reserva_prouni":["Float","NotEmpty"],"qt_limite_prouni":["Digits","NotEmpty"],"vl_reserva_licenciatura":["Float","NotEmpty"],"nu_nota_minima_enem_licenciatura":["Float","NotEmpty"],"qt_limite_licenciatura":["Digits","NotEmpty"],"vl_reserva_regular":["Float","NotEmpty"],"nu_nota_minima_enem_regular":["Float","NotEmpty"],"qt_limite_regular":["Digits","NotEmpty"],"vl_reserva_geral":["Float","NotEmpty"],"qt_limite_geral":["Digits","NotEmpty"],"dt_inicio_vigencia":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_vigencia":[["Date","YYYY-MM-dd"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"ParametroRenda":{"nu_perc_comprometimento_min":["Float"],"nu_perc_comprometimento_max":["Float"],"nu_perc_financ_inscricao_min":["Float"],"nu_perc_financ_inscricao_max":["Float"],"nu_perc_financ_aditamento_min":["Float"],"nu_perc_financ_aditamento_max":["Float"]},"Perfil":{"ds_perfil":[["StringLength",0,30],"NotEmpty"]},"Procuracao":{"co_representante":["Digits","NotEmpty"],"co_ticket_assinatura":[["StringLength",0,1000],"NotEmpty"],"dt_assinatura":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"Representante":{"co_adesao":["Digits","NotEmpty"],"tp_representante":[["StringLength",0,1],"NotEmpty"],"nu_cpf":[["StringLength",0,11],"NotEmpty"],"no_representante":[["StringLength",0,60],"NotEmpty"],"co_cidade":[["StringLength",0,15]],"co_uf":[["StringLength",0,15]],"ds_tipo_logradouro":[["StringLength",0,20]],"ds_logradouro":[["StringLength",0,100]],"ds_logradouro_comp":[["StringLength",0,156]],"ds_bairro":[["StringLength",0,70]],"ds_numero":[["StringLength",0,20]],"nu_cep":[["StringLength",0,8]],"dt_inicio_representacao":[["Date","YYYY-MM-dd"],"NotEmpty"],"dt_termino_representacao":[["Date","YYYY-MM-dd"]],"dt_inclusao":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"co_usuario_ultima_operacao":["Digits","NotEmpty"],"ds_email_rep_financeiro":["EmailAddress",["StringLength",0,100]],"ds_email_rep_legal":["EmailAddress",["StringLength",0,100]],"nu_telefone_comercial":[["StringLength",0,11]],"nu_telefone_celular":[["StringLength",0,11]]},"SituacaoAdesao":{"ds_situacao_adesao":[["StringLength",0,20],"NotEmpty"],"ds_detalhamento_situacao":[["StringLength",0,80],"NotEmpty"]},"TermoAdesao":{"co_adesao":["Digits","NotEmpty"],"st_termo_aditivo":[["StringLength",0,1],"NotEmpty"],"ds_razao_social":[["StringLength",0,200],"NotEmpty"],"co_natureza_juridica":[["StringLength",0,4],"NotEmpty"],"nu_cnpj":[["StringLength",0,14],"NotEmpty"],"co_mantenedora":["Digits","NotEmpty"],"co_cidade":[["StringLength",0,15],"NotEmpty"],"co_uf":[["StringLength",0,15],"NotEmpty"],"ds_tipo_logradouro":[["StringLength",0,20]],"ds_logradouro":[["StringLength",0,100]],"ds_logradouro_comp":[["StringLength",0,156]],"ds_bairro":[["StringLength",0,70]],"ds_numero":[["StringLength",0,20]],"nu_cep":[["StringLength",0,8]],"vl_adesao_requerido":["Float","NotEmpty"],"co_ticket_assinatura":[["StringLength",0,1000]],"dt_inicio_termo":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"dt_termino_termo":[["Date","YYYY-MM-dd H:i:s.u"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"],"sg_mantenedora":[["StringLength",0,20]],"co_cnae_principal":[["StringLength",0,7],"NotEmpty"]},"TermoCpsa":{"co_cpsa":["Digits","NotEmpty"],"ds_arquivo_termo":["NotEmpty"],"dt_inicio_termo":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"dt_termino_termo":[["Date","YYYY-MM-dd H:i:s.u"]],"co_usuario_ultima_operacao":["Digits","NotEmpty"]},"TipoDocumento":{"ds_tipo_documento":[["StringLength",0,50],"NotEmpty"]},"UsuarioPerfil":{"co_usuario_ssd":["Digits","NotEmpty"],"co_perfil":["Digits","NotEmpty"],"co_mantenedora":["Digits"],"co_ies":["Digits"],"co_campus":["Digits"],"co_usuario_perfil_autorizador":["Digits"],"st_autorizacao":["Digits","NotEmpty"],"dt_autorizacao":[["Date","YYYY-MM-dd H:i:s.u"]],"ds_ip_autorizacao":[["StringLength",0,20]],"dt_inclusao":[["Date","YYYY-MM-dd H:i:s.u"],"NotEmpty"],"dt_alteracao":[["Date","YYYY-MM-dd H:i:s.u"]]},"UsuarioSsd":{"co_usuario_ssd":["Digits","NotEmpty"],"nu_cpf":[["StringLength",0,11]],"nu_cnpj":[["StringLength",0,14]],"no_usuario":[["StringLength",0,200],"NotEmpty"],"tp_sexo":[["StringLength",0,1]],"nu_ddd":[["StringLength",0,2]],"nu_telefone":[["StringLength",0,10]],"ds_email":["EmailAddress",["StringLength",0,50]],"dt_ultimo_acesso":[["Date","YYYY-MM-dd H:i:s.u"]],"dt_inclusao":[["Date","YYYY-MM-dd H:i:s.u"]],"dt_alteracao":[["Date","YYYY-MM-dd H:i:s.u"]],"st_historico":["Digits"],"vl_global_fundo":["Float","NotEmpty"]}};
     $.each(data, function(model){
         $.each(this, function(name){
             var selector = 'form[model='+model+'] input[name='+name+']:not([model]), input[model='+model+'][name='+name+'], input[model='+model+'][id='+name+'], form[model='+model+'] select[name='+name+']:not([model]), select[model='+model+'][name='+name+'], form[model='+model+'] textarea[name='+name+']:not([model]), textarea[model='+model+'][name='+name+']',
                 $input = $(selector);
                 flag = false;

             if ($input.size() > 0) {

                 if ($input.is("[name*='cpf']")) {
                     $input.filter("[name*='cpf']").setMask($.mask.masks.cpf);
                     flag = true;
                 } else if ($input.is("[name*='cnpj']")) {
                     $input.filter("[name*='cnpj']").setMask($.mask.masks.cnpj);
                     flag = true;
                 } else if ($input.is("[name*='cep']")) {
                     $input.filter("[name*='cep']").setMask($.mask.masks.cep);
                     flag = true;
                 } else if ($input.is("[name*='vl']")) {
                     $input.filter(":not(.notmask)[name*='vl']").setMask({mask: '99,999.999.999.9', type: 'reverse', defaultValue: '000'});
                     flag = true;
                 } else if ($input.is("[name*='nu_telefone']")) {
                     $input.filter("[name*='nu_telefone']").setMask($.mask.masks.phone);
                     flag = true;
                 }

                 $.each(this, function(index, rule){
                     var procedure = '',
                         parameters = [];

                     if (typeof rule == 'string') {
                         procedure = rule;
                         parameters = [];
                     } else {
                         procedure = rule.shift();
                         parameters = rule;
                     }

                     if (!flag) {
                         switch (procedure) {
                             case 'Digits':
                             case 'Numeric':
                                 $input.filter(selector).filter(':not(select)').setMask({mask:'999.999.999.999', type: 'reverse'});
                                 break;

                             case 'Date':
                                 $input.filter(selector).filter(':not(select)').setMask($.mask.masks.date);
                                 break;

                             case 'Float': //Provisioriamente só as notas do enem usam esse campo, no formato 999,99
                                 $input.filter(selector).filter(':not(select)').setMask({mask:'999,99', defaultValue:'000'});
                                 break;

                             case 'StringLength':
                                 $input.filter(selector).filter(':not(select)').attr('maxlength', rule[1]);
                                 break;

                             default:
                                 break;
                         }
                          flag = true;
                     }
                     procedure = procedure.charAt(0).toLowerCase() + procedure.substring(1);
                     $input.validation().add(procedure, parameters);
                 });
             }
         });
     });

     // Definição da máscaras

     // Nome
     $.mask.rules.N           = /[^0-9]/;
     $.mask.masks.nome        = {mask:'N',type:'repeat',fixedChars:'[(),.:/-]'};
     $('input.nome').setMask($.mask.masks.nome);
     // telefone
     $('.ddd').setMask('99');
     $('.telefone').setMask('9999-9999');
     // Porcentagem
     $('.porcentagem').setMask({mask:'99,991', type: 'reverse', defaultValue:'000'});
     // CNPJ
     $('.cnpj').setMask('99.999.999/9999-99');
     // Monetário
     $('.monetario').setMask($.mask.masks.decimal);
     // Data
     $('.data').setMask($.mask.masks.date);
     // Número de referência
     $('.nreferencia').setMask('99999999999999999');

     // Regionalização do DatePicker
     $.datepicker.setDefaults($.datepicker.regional['pt-BR']);

     // Definição da restrição de datas mínimas e máximas do datepicker.
     if($('input.dtInicio').length && $('input.dtTermino').length){
         inicio = $('input.dtInicio').val().split('/');
         termino = $('input.dtTermino').val().split('/');

         $('input.dtInicio').datepicker({
             maxDate: new Date(termino[2], termino[1] - 1, termino[0]),
             onSelect: function(dateText, inst) {
                 var data = dateText.split('/');
                 $('input.dtTermino').datepicker('option', 'minDate',new Date(data[2], data[1]-1,data[0]));
             }
         });
         $('input.dtTermino').datepicker({
             minDate: new Date(inicio[2], inicio[1] - 1, inicio[0]),
             onSelect: function(dateText, inst) {
                 var data = dateText.split('/');
                 $('input.dtInicio').datepicker('option', 'maxDate', new Date(data[2], data[1]-1,data[0]));
             }
         });
     }

     // Datas dtInicio são readonly
     $('input.dtInicio').attr("readonly","readonly");

     /*
      * Definição do botão de exclusão
      *
      * usage:
      * <a class="excluir" id="<?php echo $data->co_entidade;?>" href="javascript:void(0);" url="modulo/controller/excluir/co_entidade/<?php echo $data->co_entidade; ?>" title="Título da caixa de diálogo!">
      *
      */
     $('a.excluir').click(function(){
         var id     = $(this).attr('id');
         var dialog = $('#dialog-delete');
         var a = $(this);
         dialog.html(a.attr('title'));
         dialog.dialog({
             bgiframe: true,
             resizable: false,
             height:140,
             modal: true,
             autoOpen: false,
             overlay: {
                 backgroundColor: '#000',
                 opacity: 0.5
             },
             buttons: {
                 Não: function() {
                     $(this).dialog('close');
                 },
                 Sim: function() {
                     location = $( 'base' ).attr('href') + a.attr('url');
                     $(this).dialog('close');
                 }
             }
         });
         dialog.dialog('open');
     });

     /*
      * Definição do botão de exclusão
      *
      * usage:
      * <a class="excluir" id="<?php echo $data->co_entidade;?>" href="javascript:void(0);" url="modulo/controller/excluir/co_entidade/<?php echo $data->co_entidade; ?>" title="Título da caixa de diálogo!">
      *
      */
     $('.confirmacao').click(function(){
         var dialog = $('#dialog-envio-guia');
         var a = $(this);
         dialog.html(a.attr('title'));
         dialog.dialog({
             bgiframe: true,
             resizable: false,
             height:140,
             modal: true,
             autoOpen: false,
             overlay: {
                 backgroundColor: '#000',
                 opacity: 0.5
             },
             buttons: {
                 Não: function() {
                     $(this).dialog('close');
                 },
                 Sim: function() {
                     location = $( 'base' ).attr('href') + a.attr('url');
                     $(this).dialog('close');
                 }
             }
         });
         dialog.dialog('open');
     });

     // Definição de botões com redirecionamento
     $('.clique').click(function(){
         location = $( 'base' ).attr( 'href' ) + $(this).attr( 'url' );
     });

     // Definição de comportamento para tabela com ordenação
     $('.tablesorter').tablesorter({
         widthFixed: true,
         widgets: ['zebra']
     });

    // Adiciona o title nos options dos selects
    $('select').find('option').each( function(data ) {
        $(this).attr('title', $(this).text()).attr('alt', $(this).text());
    });

    // Chamada de modais do módulo financeiro
    $('.aviso-modal-financeiro').click(function(){
        var url     = $(this).attr('url') || $(this).attr('href'),
            title   = $(this).attr('title'),
            altura  = $(this).attr('altura') || 530,
            largura = $(this).attr('largura') || 830,
            $modal  = $('#dialog-financeiro');

        $modal.load(url);

        $modal.dialog({
            bgiframe: true,
            resizable: false,
            height: parseInt(altura),
            width:  parseInt(largura),
            modal: true,
            autoOpen: false,
            title: title,
            overlay: {
                backgroundColor: '#000',
                opacity: 0.5
            }
        });
        $modal.dialog('open');
        return false;
    });

    // ----- LINK SIGEF LOG ----------------------------------------------------

    $('.sigef-log-link').live('click', function(){
        var coExternal = $(this).attr('co-external'),
        coExternalExtra = $(this).attr('co-external-extra'),
        tpExternal = $(this).attr('tp-external');

        title = '';
        switch (tpExternal) {
            case 'nl':
                title = 'Nota de lançamento';
                break;

            case 'darf':
                title = 'Guia DARF';
                break;

            case 'gps':
                title = 'Guia GPS';
                break;

            case 'ob':
                title = 'Ordem Bancária';
                break;
            case 'cadastrar-mantenedora-sigef':
                title = 'Cadastro de Mantenedora';
                break;
            case 'cadastrar-conta-mantenedora-sigef':
                title = 'Cadastro de Conta Mantenedora';
                break;
        }
        title += ' ' + coExternal;

        // cria elemento HTML
        var dialog = $('#sigef-log-modal');
        if (!dialog.length) {
            dialog = $('<div id="sigef-log-modal" style="overflow-y:scroll;overflow-x:auto;">');
        }

        // inicia modal
        htmlLoading = '<div style="text-align:center;margin-top:50px;">Aguarde, carregando dados de log...</div>';
        dialog.html(htmlLoading).dialog({
            title: title,
            modal: true,
            width: 400,
            height: 500,
            buttons: {
                'Estornar' : function() {
                    if (!confirm('Deseja realmente estornar esta guia?')) {
                        return;
                    }
                    //$(this).dialog('close');
                    $.get('financeiro/sigef/estornar/co_externo/' + coExternal + '/tp_externo/' + tpExternal, function(){
                        $('<div style="text-align:center;margin:10px 0;"></div>')
                            .html('Estorno realizado com sucesso!')
                            .dialog({
                                title: 'Estorno de guia',
                                height: 80,
                                close: function() {
                                    location.reload();
                                }
                            });
                    });
                },
                'Fechar' : function() {
                    $(this).dialog('close')
                }
            }
        }).load('financeiro/sigef/pacotes/co_externo/' + coExternal + '/co_externo_extra/' + coExternalExtra + '/tp_externo/' + tpExternal );

        // desabilita botão de extorno, somente a action pode habilitá-la
        // novamente, caso seja possível realizar extorno, veja action
        // financeiro/sigef/log para mais detalhes
        var buttonReversal = $('.ui-dialog-buttonpane .ui-button:first', dialog.parent());
        buttonReversal.attr('disabled', true).hide();
    });
});

//Função relativa ao number_format do php
function number_format(number, decimals, dec_point, thousands_sep) {
    number = (number+'').replace(',', '').replace(' ', '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',

    toFixedFix = function (n, prec) {
        var k = Math.pow(10, prec);
        return '' + Math.floor(n * k) / k;
    };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }

    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }

    return s.join(dec);
}

function replaceAll (strText , strFinder, strReplacer)
{
    strText += "";
    var strSpecials = /(\.|\*|\^|\?|\&|\$|\+|\-|\#|\!|\(|\)|\[|\]|\{|\}|\|)/gi; // :D
    strFinder = strFinder.replace(strSpecials, "\\$1")

    var objRe = new RegExp(strFinder, "gi");
    return strText.replace(objRe, strReplacer);
}

function converteMonetario (num)
{
    return new Number( replaceAll( replaceAll( num, ".", "" ), ",", ".") );
}
 
/**
 * Mostra uma mensagem recebida em requisição ajax como mensagem para o usuário
 * @param txt Texto da mensagem.
 */
function mostrarMensagemAjax(txt)
{
    var $listaErros = $('ul#lista-mensageiro-erros'),
        $divErros   = $('div#div-mensageiro-erros')
        $mensagem   = $('<li>').html(txt);
        
    $listaErros.append($mensagem);
    $divErros.css('display','');
}

function validarCnpj(cnpj) {
    cnpj = cnpj.replace(/[^0-9]/ig, '');
    if (cnpj.length != 14)
        return false;

    if (cnpj.length != 14)
        return false;

    var dv      = false;
    var cnpj_dv = cnpj.substr( 12, 2 );

    var digito  = 0;
    var controle = '';

    for (var i = 0; i < 2; i++ ) {
        var soma = 0;
        for ( var j = 0; j < 12; j++ )
            soma += cnpj.substr(j, 1) * ((11 + i - j) % 8 + 2);

        if ( i == 1 )
            soma += digito * 2;

        digito = 11 - soma  % 11;

        if ( digito > 9 )
            digito = 0;

        controle += digito + '';
    }

    return controle == cnpj_dv;
}
