//--------------------------- funções de conferência
// aCamposConferencia
//   1 - descrição do campo
//   2 - nome do campo no formulário
//   3 - obrigatório, true ou false
//   4 - tipo do campo : email / data / valor / cep / radio / combocategoria
var aCamposConferencia

function confereFormulario(formulario)
{
  var resultado = true;
  var i, j;

  var msgErro;
  var vazio;
  
  var campo;
  var nome;
  var obrigatorio;
  var tipo;
  
  var tempRadio;
  
  for (i = 0; i < aCamposConferencia.length; i += 4)
  {
    campo = achaCampo(formulario, aCamposConferencia[i + 1]);
    nome = aCamposConferencia[i];
    obrigatorio = aCamposConferencia[i + 2];
    tipo = aCamposConferencia[i + 3];
    msgErro = ""

    if (campo == null)
      return false;
      
    if (tipo == "radio") {
      vazio = true;
      
      j = 0;
      do {
        tempRadio = campo[j];
        if (tempRadio != null) {
          if (tempRadio.checked) {
            vazio = false;
            break;
          }
        }
        j++;
      } while (tempRadio != null);
    }
    else if (tipo == "valor")
	  {
      //vazio = ((retiraEspacos(campo.value) == "") || (parseFloat(retNumerosStr(campo.value)) == 0));
      vazio = (retiraEspacos(campo.value) == "");
	  if (! vazio)
	     vazio = (parseFloat(retNumerosStr(campo.value)) == 0);
	  }
    else if (tipo == "combocategoria")
	  {
      vazio = (retiraEspacos(campo.value) == "");
	  if (! vazio)
         vazio = (retiraEspacos(campo.value) == "Selecione:" + nome );
      }
    else
      vazio = (retiraEspacos(campo.value) == "");
    
  
    if (vazio && obrigatorio)
    {
      if (tipo == "combocategoria")
	     msgErro = "Selecione: " + nome;
      else
	     msgErro = "O campo " + nome + " deve ser preenchido";
      resultado = false;
      break;
    }
    
    if (! vazio) {
      if (tipo == "email")
        msgErro = confereCampoEMail(campo, nome);
      else if (tipo == "data")
        msgErro = confereCampoData(campo, nome);
      else if (tipo == "valor")
        msgErro = confereCampoValor(campo, nome);
      else if (tipo == "cep")
        msgErro = confereCampoCEP(campo, nome);
      
      if (msgErro != "") {
        resultado = false;
        break;
      }
    }
  }
  
  if (! resultado) {
    alert(msgErro);
    if (tipo == "radio")
      campo[0].focus();
    else
      campo.focus();
  }

  return (resultado);
}

function retiraCaracter(texto, caracter)
{
  while (texto.indexOf(caracter) != -1)
    texto = texto.replace(caracter, "");
    
  return texto;
}

function retiraEspacos(texto)
{
  return retiraCaracter(texto, " ");
}

function retNumerosStr(texto)
{
  var tempStr;
  var tempChar;
  var iLen;
  var i;
  
  iLen = texto.length;
  tempStr = "";

  for (i = 0; i < iLen; i++) {
    tempChar = texto.substr(i, 1);
    if ((tempChar >= "0") && (tempChar <= "9"))
      tempStr = tempStr + tempChar;
  }
  
  return tempStr;
}

function retValorStr(texto)
{
  var tempStr;
  var tempChar;
  var iLen;
  var i;
  var teveVirgula = false;
  
  iLen = texto.length;
  tempStr = "";

  for (i = 0; i < iLen; i++) {
    tempChar = texto.substr(i, 1);
    if ((tempChar >= "0" && tempChar <= "9") || (tempChar == "," && (! teveVirgula))) {
      if (tempChar == ",")
        teveVirgula = true; // só permite uma vírgula
    
      tempStr = tempStr + tempChar;
    }
  }
  
  return tempStr;
}

function confereCampoEMail(campo, nome)
{
  var msgErro = "";
  
  if ((campo.value.indexOf("@") == -1) || (campo.value.indexOf(".") == -1))
    msgErro = "O campo " + nome + " não parece ser um e-mail válido";
    
  return (msgErro);
}

function confereCampoCEP(campo, nome)
{
  var msgErro = "";
  
  if ((campo.value.length != 9) || (campo.value.indexOf("-") == -1))
    msgErro = "O campo " + nome + " não parece ser um CEP válido";
    
  return (msgErro);
}

function confereCampoData(campo, nome)
{
  var msgErro = "";
  var tempAno, tempMes, tempDia;
  var ano, mes, dia;
  var tempData;
  var tempStr;
  
  if (campo.value.length != 10 || campo.value.substr(2, 1) != "/" || campo.value.substr(5, 1) != "/")
    msgErro = "O campo " + nome + " deve estar no formato dd/mm/aaaa";
  else {
    tempStr = retNumerosStr(campo.value);
    
    if (tempStr.length != 8)
      msgErro = "O campo " + nome + " deve estar no formato dd/mm/aaaa";
    else {
      tempAno = tempStr.substr(4, 4);
      tempMes = tempStr.substr(2, 2);
      tempDia = tempStr.substr(0, 2);
      
      if (! dataValida(tempAno, tempMes, tempDia))
        msgErro = "O campo " + nome + " não é uma data válida";
    }
  }
    
  return (msgErro);
}

function confereCampoValor(campo, nome)
{
  var msgErro = "";
  var tempStr;
  
  tempStr = retValorStr(campo.value);
  if (tempStr != retiraEspacos(campo.value)) {
     tempStr = "-" + tempStr;
     if (tempStr != retiraEspacos(campo.value))
        msgErro = "O campo " + nome + " não é um valor numérico válido";
  }  
  return (msgErro);
}

//--------------------------- funções auxiliares
function achaCampo(formulario, nomeCampo)
{
  var i;
  var campo = null;
  
  campo = formulario.elements[nomeCampo];

  achou = (campo != null);
  
  return (campo);
}

function focoFormulario(nomeFormulario)
{
  document.forms[nomeFormulario].elements[0].focus();
}

//--------------------------- funções de formatação de dados

function formataCampoNumerico(campo, teclapres, mascara, adicionaCaracter, invertido)
{
  return true;
}

function formataCampoApenasNumeros(campo, teclapres)
{
  return formataCampoApenasCaracteres(campo, "0123456789", teclapres);
}
    
function formataCampoApenasCaracteres(campo, caracteres, teclapres)
{
  return true;
}

function formataData(campo, teclapres)
{
  return formataCampoNumerico(campo, teclapres, "##/##/####", true, false);
}

function formataHora(campo, teclapres)
{
  return formataCampoNumerico(campo, teclapres, "##:##", true, false);
}

function formataCEP(campo, teclapres)
{
  return formataCampoNumerico(campo, teclapres, "#####-###", true, false);
}

function formataCPF(campo, teclapres)
{
  return formataCampoNumerico(campo, teclapres, "###.###.###-##", true, false);
}

function formataValor(campo, tammax, teclapres)
{
//  return formataCampoNumerico(campo, teclapres, "###.###.###,##", false, true);
  return formataCampoApenasCaracteres(campo, "0123456789,-", teclapres);
}

function formataNumeroCartao(campo, tipoCartao, teclapres)
{
  return formataCampoApenasCaracteres(campo, "0123456789 ", teclapres);
}

function dataValida(ano, mes, dia)
{
  if (dia < 1 || dia > 31) {
    return false;
  }
    
  if (mes < 1 || mes > 12) { 
    return false;
  }
    
  if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia == 31) {
    return false;
  }
    
  if (mes == 2) { 
    var bissexto = (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0));
    if (dia > 29 || (dia == 29 && ! bissexto)) {
      return false;
    }
  }
    
  if (ano < 1900) {
    return false;
  }	
  
  return true;
}


