var http;
var meuForm;

function verificaFormCadastro(form){
  var invalid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
  var erro = '';
  var focou = false;
  var objFocus = null;
  meuForm = form;

  if (invalid.test(form.email.value) == false) {
    erro += "  - Endereço de E-mail inválido\n";
    form.email.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.email;
    }
  } else 
    form.email.className='campo2';

  if(form.senha.value.length <= 2){
    erro += "  - Sua Senha deve conter no mínimo 3 caracteres\n";
    form.senha.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.senha;
    }
  } else
    form.senha.className = 'campo2';

  if(form.senha.value != form.csenha.value){
    erro += "  - Senhas não conferem\n";
    form.csenha.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.csenha;
    }
  } else
    form.csenha.className = 'campo2';

  //fisica
  if(form.tipopessoa[0].checked){

    if(form.nome.value.length <= 2){
      erro += "  - Seu Nome deve conter no mínimo 3 caracteres\n";
      form.nome.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.nome;
      }
    } else
      form.nome.className = 'campo2';

    if(form.sobrenome.value.length <= 2){
      erro += "  - Seu Sobrenome deve conter no mínimo 3 caracteres\n";
      form.sobrenome.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.sobrenome;
      }
    } else
      form.sobrenome.className = 'campo2';

    if(form.sexo.value == ""){
      erro += "  - Escolha o sexo\n";
      form.sexo.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.sexo;
      }
    } else
      form.sexo.className = 'campo2';

    if(Number(form.dia.value) < 1 || Number(form.dia.value) > 31 || isNaN(form.dia.value)){
      erro += "  - O dia deve estar no intervalo de 1 a 31\n";
      form.dia.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.dia;
      }
    } else
      form.dia.className = 'campo2';
  
    if(Number(form.mes.value) < 1 || Number(form.mes.value) > 12 || isNaN(form.mes.value)){
      erro += "  - O mês deve estar no intervalo de 1 a 12\n";
      form.mes.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.mes;
      }
    } else
      form.mes.className = 'campo2';
  
    if(form.ano.value.length == 0 || isNaN(form.ano.value)){
      erro += "  - Preencha o ano corretamente\n";
      form.ano.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.ano;
      }
    } else
      form.ano.className = 'campo2';

    if(!ehValidoCPF(form.cpf_cnpj.value)){
      erro += "  - CPF inválido\n";
      form.cpf_cnpj.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.cpf_cnpj;
      }
    } else
      form.cpf_cnpj.className = 'campo2';

    if(form.rg_ie.value.length == 0){
      erro += "  - Preencha o RG\n";
      form.rg_ie.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.rg_ie;
      }
    } else
      form.rg_ie.className = 'campo2';

    if(form.orgao.value.length == 0){
      erro += "  - Preencha o Órgão Emissor do RG\n";
      form.orgao.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.orgao;
      }
    } else
      form.orgao.className = 'campo2';

  } else { //pessoa juridica

    if(form.nome.value.length <= 2){
      erro += "  - Sua Razão Social deve conter no mínimo 3 caracteres\n";
      form.nome.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.nome;
      }
    } else
      form.nome.className = 'campo2';

    if(!ehValidoCNPJ(form.cpf_cnpj.value)){
      erro += "  - CNPJ inválido\n";
      form.cpf_cnpj.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.cpf_cnpj;
      }
    } else
      form.cpf_cnpj.className = 'campo2';

    if(form.rg_ie.value.length == 0){
      erro += "  - Preencha a I.E.\n";
      form.rg_ie.className = 'campo1';
      if(!focou){
        focou = true;
        objFocus = form.rg_ie;
      }
    } else
      form.rg_ie.className = 'campo2';

	}

  if(form.endereco.value.length <= 4){
    erro += "  - Seu Endereço deve conter no mínimo 5 caracteres\n";
    form.endereco.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.endereco;
    }
  } else
    form.endereco.className = 'campo2';

  if(form.numero.value.length == 0){
    erro += "  - Preencha o número (Endereço)\n";
    form.numero.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.numero;
    }
  } else
    form.numero.className = 'campo2';

  if(form.bairro.value.length <= 2){
    erro += "  - Seu Bairro deve conter no mínimo 3 caracteres\n";
    form.bairro.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.bairro;
    }
  } else
    form.bairro.className = 'campo2';

  if(form.cep.value.length < 8){
    erro += "  - O CEP deve conter 8 números\n";
    form.cep.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.cep;
    }
  } else
    form.cep.className = 'campo2';

  if(form.cidade.value.length <= 2){
    erro += "  - Sua Cidade deve conter no mínimo 3 caracteres\n";
    form.cidade.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.cidade;
    }
  } else
    form.cidade.className = 'campo2';

  if(form.uf.value == "0"){
    erro += "  - Escolha o estado\n";
    form.uf.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.uf;
    }
  } else
    form.uf.className = 'campo2';

  if(form.pais.value == "0" || (form.uf.value == "" && form.pais.value == "30")){
    erro += "  - Escolha o país\n";
    form.pais.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.pais;
    }
  } else
    form.pais.className = 'campo2';

  if(form.codigo_seguranca.value.length < 6){
    erro += "  - Escolha o código de segurança deve conter 6 números\n";
    form.codigo_seguranca.className = 'campo1';
    if(!focou){
      focou = true;
      objFocus = form.codigo_seguranca;
    }
  } else
    form.codigo_seguranca.className = 'campo2';

  if(erro!=''){
    alert("Corrija o(s) seguinte(s) erro(s):\n" + erro);
    objFocus.focus()
    return false;
  } else {
    validaDadosServidor(form.email.value, form.codigo_seguranca.value);
    return false;
  }
}

function chTipo(tipo){
  if(tipo == 'F'){
    //mostrando
    document.getElementById('rowSobrenome').style.display = document.getElementById('rowPrincipal').style.display;
    document.getElementById('rowSexo').style.display = document.getElementById('rowPrincipal').style.display;
    document.getElementById('rowDtNascimento').style.display = document.getElementById('rowPrincipal').style.display;
    document.getElementById('rowOrgao').style.display = document.getElementById('rowPrincipal').style.display;

    //mudando os labels
    document.getElementById('rowNome').innerHTML = 'Nome:';
    document.getElementById('rowCPF_CNPJ').innerHTML = 'CPF:';
    document.getElementById('rowRG_IE').innerHTML = 'RG:';
    document.getElementById('rowTelefone').innerHTML = 'Telefone Residencial:';
  } else {
    //ocultando
    document.getElementById('rowSobrenome').style.display = 'none';
    document.getElementById('rowSexo').style.display = 'none';
    document.getElementById('rowDtNascimento').style.display = 'none';
    document.getElementById('rowOrgao').style.display = 'none';

    //mudando os labels
    document.getElementById('rowNome').innerHTML = 'Raz&atilde;o Social:';
    document.getElementById('rowCPF_CNPJ').innerHTML = 'CNPJ:';
    document.getElementById('rowRG_IE').innerHTML = 'I.E.:';
    document.getElementById('rowTelefone').innerHTML = 'Telefone p/ Contato:';
  }
}

function ehValidoCPF(s){
  var i;
  var c = s.substr(0,9);
  var dv = s.substr(9,2);
  var d1 = 0;
  for (i = 0; i < 9; i++)
    d1 += c.charAt(i)*(10-i);

  if (d1 == 0) return false;
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(0) != d1) return false;

  d1 *= 2;
  for (i = 0; i < 9; i++)
    d1 += c.charAt(i)*(11-i);
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(1) != d1) return false;
  return true;
}

function ehValidoCNPJ(s) {
  var i;
  var c = s.substr(0,12);
  var dv = s.substr(12,2);
  var d1 = 0;
  for (i = 0; i < 12; i++)
    d1 += c.charAt(11-i)*(2+(i % 8));
  if (d1 == 0) return false;
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(0) != d1)
    return false;
  d1 *= 2;
  for (i = 0; i < 12; i++)
    d1 += c.charAt(11-i)*(2+((i+1) % 8));
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(1) != d1)
    return false;
  return true;
}

function getHTTPObject() {
  http = null;
  if (window.XMLHttpRequest)
    xmlhttp = new XMLHttpRequest();
  else if (window.ActiveXObject)
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  return xmlhttp;
}

function handler(){
  if(http.readyState == 4){
    if(http.status == 200){
      document.getElementById('verificaDadosServidor').innerHTML = http.responseText;
      retorno();
    } else
      alert("Houve o seguinte problema ao obter os dados do servidor:\n" + http.statusText);
  }
}

function validaDadosServidor(email, codigo){
  document.getElementById('verificaDadosServidor').innerHTML = '';
  http = getHTTPObject();
  http.onreadystatechange = handler;
  http.open("GET", "verificaEmailCodigo.php?email=" + email + "&codigo=" + codigo, true);
  http.send(null);
}

function retorno(){
  if(meuForm == null || meuForm == 'undefined')
    if(document.getElementById('mForm') != null && document.getElementById('mForm') != 'undefined')
      meuForm = document.getElementById('mForm');
    else
     return false;
  if(meuForm.retorno.value.length == 0)
    meuForm.submit();
  else {
    var obj;

    //destacar os campos corretos
    obj = document.getElementById('camposCorretos');
    if(obj!=null && obj!='undefined' && obj.value.length > 0){
      var camposCorretos = obj.value.split(',');
      for(var i=0; i<camposCorretos.length; i++)
        document.getElementById(camposCorretos[i]).className = 'campo2';
		}

    //destacar os campos errados
    obj = document.getElementById('camposIncorretos');
    if(obj!=null && obj!='undefined' && obj.value.length > 0){
      var camposIncorretos = obj.value.split(',');
      for(var i=0; i<camposIncorretos.length; i++)
        document.getElementById(camposIncorretos[i]).className = 'campo1';
		}

    alert("Ocorreu(ram) algun(s) erro(s):\n" + meuForm.retorno.value);

    obj = document.getElementById(meuForm.foco.value)
    if(meuForm.foco.value.length > 0 && obj!=null && obj!='undefined')
      obj.focus();
	}
}
