HEX
Server: LiteSpeed
System: Linux cp01.bhostbrasil.com.br 5.14.0-611.16.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Dec 22 03:40:39 EST 2025 x86_64
User: onlyfibr (1083)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/onlyfibr/public_html/assinar/includes/footer_public.php
<!-- Footer -->
<footer class="footer">
        <div class="container">
            <div class="row">
                <div class="col-md-6">
                    <p>&copy; <?php echo date('Y'); ?> <?php echo htmlspecialchars(defined('NOME_PROVEDOR') ? NOME_PROVEDOR : 'Provedor'); ?>. Todos os direitos reservados.</p>
                </div>
                <div class="col-md-6 text-md-end">
                    <?php if (defined('TELEFONE_SUPORTE')): ?>
                    <p><i class="fas fa-phone-alt me-1"></i> Suporte: <?php echo htmlspecialchars(TELEFONE_CONTATO); ?></p>
                    <?php else: ?>
                    <p><i class="fas fa-phone-alt me-1"></i> Suporte: <a href="tel:+5500000000000">Entre em contato</a></p>
                    <?php endif; ?>
                </div>
            </div>
        </div>
    </footer>
    
    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script src="js/custom.js"></script>

    <!-- Caso o arquivo custom.js não seja encontrado, este script é um fallback -->
    <script>
        if (typeof jQuery === 'undefined') {
            console.error('jQuery não está carregado. Verifique sua inclusão.');
        } else {
            $(document).ready(function() {
                // ======= GESTÃO DE CAMPOS PF/PJ =======
                function togglePessoaFields() {
                    if ($('#tipoPF').is(':checked')) {
                        $('#camposPF').addClass('visible').slideDown();
                        $('#camposPJ').removeClass('visible').slideUp();
                        $('#label_nome').html('Nome Completo <span class="text-danger">*</span>');
                        $('#label_cpfcnpj').html('CPF <span class="text-danger">*</span>');
                    } else if ($('#tipoPJ').is(':checked')) {
                        $('#camposPJ').addClass('visible').slideDown();
                        $('#camposPF').removeClass('visible').slideUp();
                        $('#label_nome').html('Razão Social <span class="text-danger">*</span>');
                        $('#label_cpfcnpj').html('CNPJ <span class="text-danger">*</span>');
                    }
                }

                // Adiciona listeners
                $('input[name="tipo_pessoa"]').on('change', togglePessoaFields);
                
                // Inicializa na carga da página
                if ($('#tipoPF').is(':checked') || $('#tipoPJ').is(':checked')) {
                    togglePessoaFields();
                }

                // ======= CAMPOS DE VENDEDOR =======
                // Seletores para os radio buttons e a div/select do vendedor
                const radioVendedorSim = $('#vendedor_sim');
                const radioVendedorNao = $('#vendedor_nao');
                const vendedorDiv = $('#vendedor-select-div');
                const vendedorSelect = $('#vendedor_id');
                const vendedorLoading = $('#vendedor-loading');
                const vendedorError = $('#vendedor-error');
                let vendedoresCarregados = false; // Flag para evitar recargas múltiplas

                // Função para mostrar/esconder e habilitar/desabilitar a seleção de vendedor
                function toggleVendedorFields() {
                    if (radioVendedorSim.is(':checked')) {
                        vendedorDiv.addClass('visible').slideDown();
                        vendedorSelect.prop('required', true); // Torna obrigatório
                        // Carrega vendedores via Ajax SÓ SE "Sim" estiver marcado E AINDA NÃO carregou
                        if (!vendedoresCarregados) {
                            loadVendedores();
                        } else {
                            vendedorSelect.prop('disabled', false); // Apenas reabilita se já carregado
                        }
                    } else {
                        vendedorDiv.removeClass('visible').slideUp();
                        vendedorSelect.prop('required', false); // Não é mais obrigatório
                        vendedorSelect.prop('disabled', true); // Desabilita para eviar envio acidental
                        vendedorSelect.removeClass('is-invalid'); // Limpa erro se esconder
                        vendedorSelect.val(''); // Limpa seleção ao esconder
                    }
                }

                // Função para carregar vendedores via AJAX
                function loadVendedores() {
                    vendedorLoading.show();
                    vendedorError.hide();
                    vendedorSelect.prop('disabled', true).html('<option value="">Carregando...</option>');

                    $.ajax({
                        url: window.location.href,
                        type: 'GET',
                        dataType: 'json',
                        data: {
                            action: 'get_vendedores' // Ação definida no PHP
                        },
                        success: function(response) {
                            vendedorSelect.empty().append('<option value="">-- Selecione o Vendedor --</option>'); // Limpa e adiciona placeholder
                            if (response.success && response.vendedores && response.vendedores.length > 0) {
                                $.each(response.vendedores, function(index, vendedor) {
                                    // Adiciona cada vendedor como uma opção
                                    if (vendedor.id && vendedor.nome) { // Verifica se tem id e nome
                                        var option = $('<option>', {
                                            value: vendedor.id,
                                            text: vendedor.nome
                                        });
                                        // Pré-seleciona se o ID corresponde ao que veio do form_data (em caso de erro)
                                        <?php if (isset($form_data['vendedor_id']) && is_numeric($form_data['vendedor_id'])) : ?>
                                            if (vendedor.id == <?php echo json_encode($form_data['vendedor_id']); ?>) {
                                                option.prop('selected', true);
                                            }
                                        <?php endif; ?>
                                        vendedorSelect.append(option);
                                    }
                                });
                                vendedoresCarregados = true; // Marca como carregado
                            } else {
                                vendedorSelect.html('<option value="">Erro ao carregar</option>'); // Mensagem de erro no select
                                vendedorError.text(response.message || 'Não foi possível carregar a lista de vendedores.').show();
                            }
                        },
                        error: function(jqXHR, textStatus, errorThrown) {
                            console.error("Erro AJAX Vendedores:", textStatus, errorThrown); // Log erro no console
                            vendedorSelect.html('<option value="">Erro de comunicação</option>');
                            vendedorError.text('Erro de comunicação ao buscar vendedores. Tente novamente.').show();
                        },
                        complete: function() {
                            vendedorLoading.hide(); // Esconde o loading
                            // Habilita o select APENAS se "Sim" ainda estiver marcado
                            if (radioVendedorSim.is(':checked')) {
                                vendedorSelect.prop('disabled', false);
                            }
                        }
                    });
                }

                // Adiciona o listener para os radio buttons de vendedor
                $('input[name="vendedor_opcao"]').on('change', toggleVendedorFields);

                // Chama a função no carregamento da página para definir o estado inicial correto
                toggleVendedorFields();
                
                // ======= GESTÃO DE INDICAÇÃO =======
                const radioIndicadoSim = $('#indicado_sim');
                const radioIndicadoNao = $('#indicado_nao');
                const indicacaoDiv = $('#indicacao-detalhes');
                const indicadorCpfCnpj = $('#indicador_cpfcnpj');
                
                // Função para mostrar/esconder campos de indicação
                function toggleIndicacaoFields() {
                    if (radioIndicadoSim.is(':checked')) {
                        indicacaoDiv.addClass('visible').slideDown();
                        indicadorCpfCnpj.prop('required', true);
                    } else {
                        indicacaoDiv.removeClass('visible').slideUp();
                        indicadorCpfCnpj.prop('required', false);
                        indicadorCpfCnpj.removeClass('is-invalid');
                        $('#indicador-feedback').html('');
                    }
                }

                // Adiciona listeners para indicação
                $('input[name="foi_indicado"]').on('change', toggleIndicacaoFields);
                
                // Inicializa na carga da página
                toggleIndicacaoFields();

                // Verificar indicador
                $('#verificar-indicador').on('click', function() {
                    const cpfcnpj = indicadorCpfCnpj.val().replace(/\D/g, '');
                    
                    if (cpfcnpj.length < 11) {
                        $('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-times-circle"></i> CPF/CNPJ inválido. Digite pelo menos 11 dígitos.</span>');
                        return;
                    }

                    $('#indicador-feedback').html('<span class="text-muted"><i class="fas fa-spinner fa-spin"></i> Verificando...</span>');

                    $.ajax({
                        url: window.location.href,
                        type: 'GET',
                        dataType: 'json',
                        data: {
                            action: 'verificar_indicador',
                            indicador_cpfcnpj: cpfcnpj
                        },
                        success: function(response) {
                            if (response.success) {
                                $('#indicador-feedback').html('<span class="text-success"><i class="fas fa-check-circle"></i> ' + response.message + '</span>');
                            } else {
                                $('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-times-circle"></i> ' + response.message + '</span>');
                            }
                        },
                        error: function() {
                            $('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-exclamation-triangle"></i> Erro de comunicação. Tente novamente.</span>');
                        }
                    });
                });

                // ======= FORMATAÇÃO E BUSCA CEP =======
                // CEP - formatação e busca automática
                $('#cep').on('input', function() {
                    // Remove caracteres não numéricos
                    let value = this.value.replace(/\D/g, '');
                    
                    // Formata como 00000-000
                    if (value.length > 5) {
                        this.value = value.substring(0, 5) + '-' + value.substring(5, 8);
                    } else {
                        this.value = value;
                    }
                    
                    // Busca CEP automaticamente quando tiver 8 dígitos
                    if (value.length === 8) {
                        buscarCep(value);
                    }
                });

                // Busca endereço via ViaCEP
                function buscarCep(cep) {
                    $('#cep-loading').show();
                    $('#cep-error').hide();

                    $.getJSON('https://viacep.com.br/ws/' + cep + '/json/', function(data) {
                        if (!data.erro) {
                            $('#logradouro').val(data.logradouro);
                            $('#bairro').val(data.bairro);
                            $('#cidade').val(data.localidade);
                            $('#uf').val(data.uf);
                            $('#numero').focus();
                        } else {
                            $('#cep-error').show();
                        }
                    }).fail(function() {
                        $('#cep-error').show();
                    }).always(function() {
                        $('#cep-loading').hide();
                    });
                }

                // ======= FORMATAÇÃO AUTOMÁTICA =======
                // Formatação de CPF/CNPJ
                $('#cpfcnpj').on('input', function() {
                    let value = this.value.replace(/\D/g, '');
                    
                    if ($('#tipoPF').is(':checked')) {
                        // Formato CPF: 000.000.000-00
                        if (value.length > 9) {
                            this.value = value.substring(0, 3) + '.' + 
                                         value.substring(3, 6) + '.' + 
                                         value.substring(6, 9) + '-' + 
                                         value.substring(9, 11);
                        } else if (value.length > 6) {
                            this.value = value.substring(0, 3) + '.' + 
                                         value.substring(3, 6) + '.' + 
                                         value.substring(6);
                        } else if (value.length > 3) {
                            this.value = value.substring(0, 3) + '.' + 
                                         value.substring(3);
                        } else {
                            this.value = value;
                        }
                    } else if ($('#tipoPJ').is(':checked')) {
                        // Formato CNPJ: 00.000.000/0000-00
                        if (value.length > 12) {
                            this.value = value.substring(0, 2) + '.' + 
                                         value.substring(2, 5) + '.' + 
                                         value.substring(5, 8) + '/' + 
                                         value.substring(8, 12) + '-' + 
                                         value.substring(12, 14);
                        } else if (value.length > 8) {
                            this.value = value.substring(0, 2) + '.' + 
                                         value.substring(2, 5) + '.' + 
                                         value.substring(5, 8) + '/' + 
                                         value.substring(8);
                        } else if (value.length > 5) {
                            this.value = value.substring(0, 2) + '.' + 
                                         value.substring(2, 5) + '.' + 
                                         value.substring(5);
                        } else if (value.length > 2) {
                            this.value = value.substring(0, 2) + '.' + 
                                         value.substring(2);
                        } else {
                            this.value = value;
                        }
                    } else {
                        this.value = value;
                    }
                });

                // Formatação de telefone
                $('#celular').on('input', function() {
                    let value = this.value.replace(/\D/g, '');
                    
                    if (value.length > 10) {
                        // Formato: (00) 00000-0000
                        this.value = '(' + value.substring(0, 2) + ') ' + 
                                     value.substring(2, 7) + '-' + 
                                     value.substring(7, 11);
                    } else if (value.length > 6) {
                        // Formato: (00) 0000-0000
                        this.value = '(' + value.substring(0, 2) + ') ' + 
                                     value.substring(2, 6) + '-' + 
                                     value.substring(6, 10);
                    } else if (value.length > 2) {
                        // Formato parcial: (00)
                        this.value = '(' + value.substring(0, 2) + ') ' + 
                                     value.substring(2);
                    } else {
                        this.value = value;
                    }
                });

                // ======= VALIDAÇÃO DO FORMULÁRIO =======
                // Remove formatação antes do envio
                $('#form-precadastro').on('submit', function() {
                    // Remove formatação do CPF/CNPJ
                    const cpfCnpjInput = $('#cpfcnpj');
                    cpfCnpjInput.val(cpfCnpjInput.val().replace(/\D/g, ''));
                    
                    // Remove formatação do Celular
                    const celularInput = $('#celular');
                    celularInput.val(celularInput.val().replace(/\D/g, ''));
                    
                    // Remove formatação do CEP
                    const cepInput = $('#cep');
                    cepInput.val(cepInput.val().replace(/\D/g, ''));
                    
                    // Continua com o envio do formulário
                    return true;
                });

                // ======= CONTEÚDO DOS MODAIS =======
                $('#modalTermos').on('show.bs.modal', function (e) {
                    $(this).find('.modal-body').html('<div class="p-4"><h4>Termos de Uso</h4><p>Estes são os termos de uso do serviço. Ao contratar nossos serviços, você concorda em cumprir estes termos.</p><p>Os termos completos incluem informações sobre pagamentos, cancelamento, uso adequado do serviço, limitações técnicas e outras condições importantes.</p><p>Para mais informações, entre em contato com nosso suporte.</p></div>');
                });

                $('#modalPolitica').on('show.bs.modal', function (e) {
                    $(this).find('.modal-body').html('<div class="p-4"><h4>Política de Privacidade</h4><p>Nossa política de privacidade descreve como coletamos, usamos e protegemos suas informações pessoais.</p><p>Respeitamos sua privacidade e utilizamos seus dados apenas para os fins específicos de prestação de serviço, faturamento e comunicação relacionada ao serviço contratado.</p><p>Seus dados são armazenados de forma segura e não são compartilhados com terceiros sem sua autorização.</p></div>');
                });
            });
        }
    </script>
</body>
</html>