function desformataCPF(sCPF) {
// (c) 1999, Márcio d'Ávila, Futuramídia Informática
  if (sCPF.length == 12 && sCPF.charAt(9) == '-')
    sCPF = sCPF.substring(0,9) + sCPF.substring(10,12);
  else if (sCPF.length == 14)
    sCPF = sCPF.substring(0,3) + sCPF.substring(4,7)
         + sCPF.substring(8,11) + sCPF.substring(12,14);
  return sCPF
} //desformataCPF

function validaCPF(sCPF) {
// (c) 1999, Márcio d'Ávila, Futuramídia Informática
  var i, D1=0, D2=0, alg;

  if (sCPF.length != 11 || sCPF == '00000000000')
    return false;
  for (i=1; i<10; i++) {
    D1 += i*sCPF.charAt(i-1);
    D2 += i*sCPF.charAt(i)
  }
  D1 %= 11; if (D1==10) D1=0;
  D2 %= 11; if (D2==10) D2=0;
  return (D1==sCPF.charAt(9) && D2==sCPF.charAt(10))
} //validaCPF

function validaForm(form) {
// (c) 1999, Márcio d'Ávila, Futuramídia Informática
  var reqFields,i,next,field,goTo,nome,atPos,dotPos,erros='',sCPF;

  // Campos obrigatórios
  reqFields = form.required.value+',';
  for (i=0; (next=reqFields.indexOf(',',i))>0; i=next+1) {
    field = eval('form.'+reqFields.substring(i, next));
    if (field.value==null && ! field.options[field.selectedIndex].value.toString() ||
        field.value!=null && ! field.value) { //FIELD VAZIO
      if (! goTo) goTo = field;
      with (field) {
        if (name=='realname')	nome='Nome'
        else if (name=='email')	nome='E-mail'
        else if (name=='Dia')	nome='Dia de Aniversário'
        else if (name=='Mes')	nome='Mês de Aniversário'
        else if (name=='Insc_Estadual')	nome='Inscrição Estadual'
        else if (name=='Socio_Nome1')	nome='Nome do Sócio 1'
        else if (name=='Socio_Cargo1')	nome='Cargo do Sócio 1'
        else if (name=='Socio_Capital1')	nome='Capital do Sócio 1'
        else if (name=='Socio_Nome2')	nome='Nome do Sócio 2'
        else if (name=='Socio_Cargo2')	nome='Cargo do Sócio 2'
        else if (name=='Socio_Capital2')	nome='Capital do Sócio 2'
        else if (name=='Socio_Nome3')	nome='Nome do Sócio 3'
        else if (name=='Socio_Cargo3')	nome='Cargo do Sócio 3'
        else if (name=='Socio_Capital3')	nome='Capital do Sócio 3'
        else if (name=='Registro_Junta')	nome='Registro na Junta Comercial'
        else if (name=='Inicio_Atividade')	nome='Data Início Atividade'
        else if (name=='Lojas_Cidade')	nome='Quantas Lojas na Cidade'
        else if (name=='Cidades_Lojas')	nome='Quais Cidades'
        else if (name=='Total_Lojas')	nome='Total de Lojas'
        else if (name=='Area_Loja')	nome='Área da Loja'
        else if (name=='Razao_Social')	nome='Razão Social'
        else nome=name;
      }
      erros += '- '+nome+' deve ser preenchido.\n';
    } //if
  } //for

  // E-mail válido
  if (form.email != null)
    with (form.email) {
      if (value) {
        atPos = value.indexOf('@');  dotPos = value.lastIndexOf('.');
        if (atPos<1 || atPos>dotPos-2 || dotPos==(value.length-2)) {
          if (! goTo) goTo = form.email;
          erros += '- E-mail não contém um endereço válido (nome@provedor.dominio).\n';
        }
      }
    } //with

  // CPF válido
  if (form.CPF != null) {
    sCPF = desformataCPF(form.CPF.value);
    if (sCPF.length == 11) {
      // Valida CPF sem formato e, se OK, exibe formatado
      if (validaCPF(sCPF))
        form.CPF.value = sCPF.substring(0,3) + '.' + sCPF.substring(3,6)
            + '.' + sCPF.substring(6,9) + '-' + sCPF.substring(9,11);
      else {
        if (! goTo) goTo = form.CPF;
        erros += '- CPF não confere; confirme se o número está correto.\n';
      }
    } else if (sCPF != "") {
      if (! goTo) goTo = form.CPF;
      erros += '- CPF inválido (999.999.999-99 ou 999999999-99 ou 99999999999).\n';
    }
  } //if

  // Aniversário válido
  if (form.Mes != null)
    with (form.Mes.options[form.Mes.selectedIndex]) {
      if (((value=='Abril' || value=='Junho' || value=='Setembro' || value=='Novembro')
           && form.Dia.options[form.Dia.selectedIndex].value>30) ||
          (value=='Fevereiro' && form.Dia.options[form.Dia.selectedIndex].value>29)) {
        erros += '- O dia selecionado não existe para o mês de '+value+'.\n';
      }
    } //with

  if (erros) {
    alert('Por favor verifique o seguinte:\n'+erros);
    goTo.focus();
    if (goTo.value!=null) goTo.select();
  }
  document.MM_returnValue = (erros == '');
  return document.MM_returnValue
} //validaForm
