var ATENCAO = "*** ATENÇÃO ***\n\n";
var MSG_CO = ATENCAO + "Os campos seguidos de asterisco ( * ) são obrigatórios. Por favor, verifique...";
var MSG_EMAIL_INVALIDO = ATENCAO + "O endereço de e-mail informado é inválido. Por favor, verifique...";

// RS 05/08/2009: remoção de espaços em branco.
function trim(stringToTrim) {
   return stringToTrim.replace(/^\s+|\s+$/g,"");
}

// RS 07/07/2008: controle da seleção de referências na pesquisa de produtos do
// comprador logado no site. Ao clicar na imagem da referência, seleciona o
// checkbox.
function sel(ref, atualizaCheckbox) {
   var troca = document.getElementById("chk" + ref).checked;
   
   if (atualizaCheckbox) {
      document.getElementById("chk" + ref).checked = !troca;
   }
   
   document.getElementById("iframeListaRef").src = "index.php/produtos/adicionaLista/" + ref;
}

// RS 04/05/2008: validação do endereço de e-mail.
function validaEmail(email) {
   var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
   
   if (!regex.test(email)) {
      return false;
   } else {
      return true;
   }
}

// RS 04/05/2008: valida o formulário de login do comprador, utilizado para acessar
// o site.
function frmLogin_onSubmit() {
   var ret = false;
   
   if (document.getElementById("compradorEmail").value.length == 0) {
      alert(ATENCAO + "Informe o seu endereço de e-mail.");
   } else {
      if (!validaEmail(document.getElementById("compradorEmail").value)) {
         alert(MSG_EMAIL_INVALIDO);
      } else {
         if (document.getElementById("lembreteSenha") == "S") {
            return true;
         }
         
         if (document.getElementById("naoCadastrado").checked || document.getElementById("jaCadastrado").checked) {
            if (document.getElementById("jaCadastrado").checked) {
               if (document.getElementById("compradorSenha").value.length == 0) {
                  alert(ATENCAO + "Informe a sua senha de acesso ao site.");
               } else {
                  ret = true;
               }
            } else {
               ret = true;
            }
         } else {
            alert(ATENCAO + "Selecione uma opção de acesso.");
         }
      }
   }
   
   if (ret) {
      document.getElementById("btContinua").style.cursor = "wait";
      document.getElementById("imgSpinner").style.display = "inline";
   }
   
   return ret;
}

// RN 08/05/2008: valida a confirmação do pedido (campos obrigatórios, campos 
// combinados, quantidades mínima de cada item, etc). Todos os itens devem ter
// uma quantidade maior do que zero e um acabamento selecionado.
function validaFinalizarPedido() {
   window.onbeforeunload = null;
   
   var ret = false;
   var f = document.frmPedido;
   var acab, qtde;
   var camposAcab = document.getElementsByTagName("select");
   
   if (f.transportadora.selectedIndex == 0 || f.prazoPagamento.selectedIndex == 0 || trim(f.entregaCidade.value).length == 0 || f.entregaUf.selectedIndex == 0 || trim(f.entregaEndereco.value).length == 0 || trim(f.entregaCep.value).length == 0) {
      alert(MSG_CO);
   } else {
      ret = true;
      
      for (i = 0; i < camposAcab.length; i++) {
         if (camposAcab[i].name.substr(0, 4) == "acab") {
            acab = camposAcab[i];
            
            if (acab.selectedIndex > 0) {
               qtde = trim(document.getElementById("qt" + acab.name.substr(4)).value);
               
               if (isNaN(qtde) || qtde <= 0 || qtde.length == 0) {
                  alert(ATENCAO + "Os campos da quantidade devem ser numéricos e superiores a zero. Por favor, verifique...");
                  ret = false;
                  break;
               }
            } else {
               alert(ATENCAO + "Todos os itens devem ter o acabamento informado. Por favor, verifique...");
               ret = false;
               break;
            }
         }
      }
   }
   
   if (ret) {
      // RN 12/06/2009: valida as quantidades mínima de cada item.
      var itens = document.getElementsByTagName("input");
      var qtdeMinAux = 0;
      var qtdeAux = 0
      var refAux;
      
      for (i = 0; i < itens.length; i++) {
         if (itens[i].id.substr(0, 2) == "qt") {
            qtdeMinAux = itens[i].getAttribute("qtdeMin");
            refAux = document.getElementById("ref" + itens[i].id.substr(2)).value.substr(3);
            
            qtdeAux = parseInt(itens[i].value);
            qtdeMinAux = parseInt(qtdeMinAux);
            
            if (qtdeAux < qtdeMinAux) {
               alert("*** ATENÇÃO ***\n\nA quantidade mínima da referência " + refAux + " é " + qtdeMinAux + ". Por favor, altere a quantidade solicitada.");
               ret = false;
            }
         }
      }
   }
   
   return ret;
}

// RN 08/05/2008: valida o envio do pedido para a Cromasinos.
function frmPedido_validaEnviaPedido() {
   var ret = false;
   
   if (confirm(ATENCAO + "Confirma o envio do pedido? As informações serão transmitidas para a Cromasinos e você receberá um e-mail de confirmação.\n\nClique em OK se as informações estiverem corretas, ou em CANCELAR para alterar o pedido.")) {
      document.getElementById("btEnviaPedido").style.cursor = "wait";
      document.getElementById("imgSpinner").style.display = "inline";
      ret = true;
   }
   
   return ret;
}

// RS 08/05/2008: altera o cliente atualmente selecionado na sessão, conforme o
// novo cliente selecionado no comboBox.
function alteraClienteComprador(combo) {
   document.getElementById("iframeAlteraClienteSessao").src = "index.php/produtos/alteraClienteSessao/" + combo.options[combo.selectedIndex].value;
}

// RN 06/08/2009: valida os dados do formulário de cadastro de um novo cliente/comprador.
function frmCadastroCompradorCliente_onSubmit() {
   var ret = false;
   var f = document.frmCadastroCompradorCliente;
   
   // Validação dos campos do comprador.
   if (f.compradorNome.value.length < 4 || f.compradorEmail.value.length < 4 || f.compradorSenhaWebsite.value.length == 0) {
      alert(MSG_CO);
   } else {
      if (f.compradorEmail.value.toLowerCase() != f.compradorEmailConfirmacao.value.toLowerCase()) {
         alert(ATENCAO + "A confirmação do endereço de e-mail não confere. Por favor, verifique...");
      } else if (!validaEmail(f.compradorEmail.value)) {
         alert(MSG_EMAIL_INVALIDO);
      } else if (f.compradorSenhaWebsite.value.toLowerCase() != f.compradorSenhaWebsiteConfirmacao.value.toLowerCase()) {
         alert(ATENCAO + "A confirmação da senha não confere. Por favor, verifique...");
      } else if (f.compradorSenhaWebsite.value.length < 6) {
         alert(ATENCAO + "A senha deve ter no mínimo 6 caracteres. Por favor, verifique...");
      } else {
         ret = true;
      }
   }
   
   // Se chegar aqui e estiver tudo OK, "ret" será TRUE e então deve validar os campos do formulário
   // do cliente.
   if (ret) {
      ret = validaCamposCliente(f);
   }
   
   if (ret) {
      if (confirm(ATENCAO + "Confirma a realização do seu cadastro?")) {
         ret = true;
         document.getElementById("btConfirma").style.cursor = "wait";
         document.getElementById("imgSpinner").style.display = "inline";
      } else {
         ret = false;
      }
   }
   
   return ret;
}

// RS 11/08/2009: validação da submissão do formulário de pedido de desenvolvimento.
function frmPedidoDesenvolvimento_onSubmit() {
   var f = document.frmPedidoDesenvolvimento;
   var ret = false;
   
   if (f.descricao.value.length == 0 || f.aplicacao.value.length == 0 || f.acabamentos.value.length == 0) {
      alert(MSG_CO);
   } else {
      if (confirm(ATENCAO + "Confirma o envio da solicitação de desenvolvimento de produto?")) {
         f.btEnviaPedido.disabled = true;
         f.btEnviaPedido.style.cursor = "wait";
         f.btEnviaPedido.value = "AGUARDE...";
         document.getElementById("imgSpinner").style.display = "inline";
         ret = true;
      }
   }
   
   return ret;
}

//RS 21/06/2008: validação do formulário de cadastro de cliente. Utilizada tanto na página
// de cadastro de comprador&cliente quanto na página apenas de novo cliente.
function validaCamposCliente(f) {
   var ret = false;
   
   if (f.clienteRazaoSocial.value.length < 2 || f.clienteNomeFantasia.value.length < 2 || f.clienteCnpj.value.length < 14 || f.clienteUf.selectedIndex == 0 || f.clienteEmail.value.length  < 4) {
      alert(MSG_CO);
   } else if (!validaEmail(f.clienteEmail.value)) {
      alert(MSG_EMAIL_INVALIDO);
   } else if (isNaN(f.clienteCnpj.value) || f.clienteCnpj.value <= 0) {
      alert(ATENCAO + "O CNPJ/CPF deve ser numérico e maior do que zero. Por favor, verifique...");
   } else if (!validaCNPJ(f.clienteCnpj.value)) {
      alert(ATENCAO + 'CNPJ inválido. Por favor, verifique...');
   } else if (f.clienteCep.value.length != 8 || isNaN(f.clienteCep.value)) {
      alert(ATENCAO + "O CEP deve ser numérico e no formato 99999999. Por favor, verifique...");
   } else if (f.clienteCidade.value.length < 3) {
      alert(ATENCAO + "A cidade deve ter pelo menos três caracteres. Por favor verifique...");
   } else if (!isNaN(f.clienteCidade.value)) {
      alert(ATENCAO + "A cidade não pode ser numérica! Por favor verifique...");
   } else if (f.clienteTelefone.value.length != 10 || isNaN(f.clienteTelefone.value)) {
      alert(ATENCAO + "O telefone deve ser numérico e com 10 dígitos (código de área seguido do número do telefone. Por favor, verifique...");
   } else if ((f.clienteFax.value.length > 0 && f.clienteFax.value.length != 10) || isNaN(f.clienteFax.value)) {
      alert(ATENCAO + "O fax deve ser numérico e com 10 dígitos (código de área seguido do número do fax. Por favor, verifique...");
   } else {
      ret = true;
   }
   
   return ret;
}

// RN 10/05/2008: lembrete da senha do cliente/comprador.
function senha() {
   var f = document.frmLogin;
   var e = f.compradorEmail.value;
   
   if (e.length < 1) {
      alert("*** ATENÇÃO ***\n\nPor favor informe o seu endereço de e-mail para receber as instruções sobre a senha.");
   } else {
      if (!validaEmail(e)) {
         alert("*** ATENÇÃO ***\n\nO endereço de e-mail informado é inválido. Por favor, verifique...");
      } else {
         document.getElementById("lembreteSenha").value = "S";
         f.submit();
      }
   }
}

// RS 10/05/2008: valida a pesquisa de produtos (referências) do comprador.
function frmProdutoPesquisa_onSubmit() {
   var f = document.frmProdutoPesquisa;
   var ret = false;
   
   if (f.linha.selectedIndex == 0) {
      alert("*** ATENÇÃO ***\n\nPor favor selecione uma linha de produtos para pesquisar.");
   } else {
      ret = true;
   }
   
   return ret;
}

// RS 25/05/2008: valida a alteração de informações do comprador, na página "Meu
// Cadastro".
function frmComprador_onSubmit() {
   var ret = false;
   var f = document.frmComprador;
   
   if (f.nome.value.length <= 3 || f.email.value.length == 0) {
      alert(MSG_CO);
   } else {
      if (!validaEmail(f.email.value)) {
         alert("*** ATENÇÃO ***\n\nO endereço de e-mail informado é inválido. Por favor, verifique...");
      } else {
         f.btAlteraComprador.disabled = true;
         f.btAlteraComprador.style.cursor = "wait";
         f.btAlteraComprador.value = "AGUARDE...";
         document.getElementById("frmComprador_imgSpinner").style.display = "inline";
         ret = true;
      }
   }
   
   return ret;
}

// RS 25/05/2008: validações da alteração de senha de comprador.
function frmAlteraSenha_onSubmit() {
   var ret = true;
   var f = document.frmAlteraSenha;
   var senhaAtual = document.getElementById("senhaAtual").value.toLowerCase();
   var senhaNova = document.getElementById("novaSenha").value.toLowerCase();
   var senhaNovaConfirmacao = document.getElementById("novaSenhaConfirmacao").value.toLowerCase();
   
   if (senhaAtual.length > 0) {
      if (senhaNova.length < 6) {
         alert("*** ATENÇÃO ***\n\nUtilize uma senha com pelo menos 6 caracteres (letras ou números).");
         ret = false;
      } else {
         if (senhaNova != senhaNovaConfirmacao) {
            alert("*** ATENÇÃO ***\n\nA nova senha e a confirmação da nova senha não conferem... Por favor verifique.");
            ret = false;
         } else {
            f.btAlteraSenha.disabled = true;
            f.btAlteraSenha.style.cursor = "wait";
            f.btAlteraSenha.value = "AGUARDE...";
            document.getElementById("frmAlteraSenha_imgSpinner").style.display = "inline";
            ret = true;
         }
      }
   } else {
      alert("*** ATENÇÃO ***\n\nInforme a senha sua atual de acesso ao site.");
      ret = false;
   }
   
   return ret;
}

// RS 25/05/2008: controle de ocultar/apresentar o formulário de novo cliente e o
// botão "Novo cliente...", utilizados na página "Meu Cadastro".
function controleNovoCliente(modo) {
   if (modo) {
      document.getElementById("divNovoCliente").style.display = "block";
      document.getElementById("btNovoCliente").style.display = "none";
   } else {
      document.getElementById("divNovoCliente").style.display = "none";
      document.getElementById("btNovoCliente").style.display = "inline";
   }
}

// RS 21/06/2008: valida inclusão de novo cliente apenas, a partir da tela "Meu Cadastro".
// Ou seja, o comprador já existe e ele quer apenas incluir um novo cliente.
function frmNovoCliente_onSubmit() {
   var ret = false;
   var f = document.frmNovoCliente;
   
   ret = validaCamposCliente(f);
   
   if (ret) {
      if (confirm("*** ATENÇÃO ***\n\nConfirma as informações do novo cliente?")) {
         f.btNovoCliente.disabled = true;
         f.btNovoCliente.style.cursor = "wait";
         f.btNovoCliente.value = "AGUARDE...";
         document.getElementById("frmNovoCliente_imgSpinner").style.display = "inline";
         document.getElementById("btCancelaNovoCliente").style.display = "none";
         ret = true;
      } else {
         ret = false;
      }
   }
   
   return ret;
}

// RS 15/07/2008: validação de número de CNPJ contendo somente números.
function validaCNPJ(val) {
   var cnpj = val;
   var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
   
   digitos_iguais = 1;
   
   for (var i=0; i < cnpj.length - 1; i++)
      if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
         digitos_iguais = 0;
         break;
      }
      
      if (!digitos_iguais) {
         tamanho = cnpj.length - 2
         numeros = cnpj.substring(0,tamanho);
         digitos = cnpj.substring(tamanho);
         soma = 0;
         pos = tamanho - 7;
         
         for (var i=tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            
            if (pos < 2) {
               pos = 9;
            }
         }
         
         resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
         
         if (resultado != digitos.charAt(0)) {
            return false;
         }
         
         tamanho = tamanho + 1;
         numeros = cnpj.substring(0,tamanho);
         soma = 0;
         pos = tamanho - 7;
         
         for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            
            if (pos < 2) {
               pos = 9;
            }
         }
         
         resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
         
         if (resultado != digitos.charAt(1)) {
            return false;
         }
         
         return true;
      } else
         return false;
}

// RS 13/08/2009: encerra a sessão do comprador no site, solicitando antes uma confirmação.
function sair(urlBase) {
   if (confirm("Confirma o encerramento da sessão no site da Cromasinos?")) {
      window.location.href = urlBase + "/login/sair";
   }
}