// JavaScript Document

// valida números inteiros
function valida_inteiro(numero) {
	numero = new String(numero);
	if(numero.length==0)
	   return false;
	var exp = /^\$|\./g ;
	// retira $ e .
	numero = numero.replace(exp, "");
	exp = /,/g ;
	// troca , por .
	numero = numero.replace(exp,".");
	numero = parseFloat(numero);
	if(isNaN(numero))
	   return false;
	if(numero!=Math.round(numero))
	   return false;
	return true;
}
// valida números
function valida_real(numero) {
	numero = new String(numero);
	if(numero.length==0)
	   return false;
	var exp = /^\$|\./g ;
	// retira $ e .
	numero = numero.replace(exp, "");
	exp = /,/g ;
	// troca , por .
	numero = numero.replace(exp,".");
	numero = parseFloat(numero);
	if(isNaN(numero))
	   return false;
	return true;
}
// ano bissexto
function ano_bi(ano) {
	if (ano % 100 == 0) {
		if (ano % 400 == 0)
		   return true;
	}
	else
	    if ((ano % 4) == 0)
		   return true;
	return false;
}
// valida data
function valida_data(data) {
	var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})\2(\d{4})$/;
	var datediv = data.match(datePat);
	if(datediv == null) return false;
	var dia = datediv[1];
	var mes = datediv[3];
	var ano = datediv[4];
	if(dia<1 || dia>31 || mes<1 || mes>12 || ano < 1900)
	   return false;
	if ((mes==4 || mes==6 || mes==9 || mes==11) && dia>30)
	   return false;
	if(mes==2)
	   if(dia>29)
	      return false;
	   else
	      if(dia==29 && !ano_bi(ano))
		     return false;
	return true;
}

// valida email
function valida_email(email) {
	var chars = "@#$&[]()/\\\{}!^:'\"";
	var pat = /^(.+)@(.+)$/;
	var emaildiv = email.match(pat);
	if(emaildiv==null)
	   return false;
	var login = emaildiv[1];
	var dominio = emaildiv[2];
	for(var i=0;i<chars.length;i++) {
		if(login.indexOf(chars.substr(i,1))!=-1)
		   return false;
	}
	for(var i=0;i<chars.length;i++) {
		if(dominio.indexOf(chars.substr(i,1))!=-1)
		   return false;
	}
	return true;
}

// valida string
function valida_string(valor) {
	valor = new String(valor);
	return (valor.length <= 3 || valor == "") ? false : true;
}
function valida_stringtam(valor,tam) {
	valor = new String(valor);
	return (valor.length <= tam || valor == "") ? false : true;
}

// valida formulário
function valida_form(form, campos, nomescampos,tipos,status) {
	/*
	   form = posição do formulários (0,1,...)
	   campos = campos a verificar (0,1,2,...)
	   tipos = tipo de cada campo:
	   		1-inteiro;
			2-data;
			3-email;
			4-string;
	   status = 0 - não obrigatório, 1 - obrigatório
	*/
	
	var mensagem = "Por favor, verifique os seguintes campos\n\n";
	var erro = false;
	var pos = -1;
	for(var i=0;i<campos.length;i++) {
		resultado = true;
		valor = document.forms[form].elements[campos[i]].value;
		switch(tipos[i]) {
			case 1:
			   resultado = valida_inteiro(valor);
			   break;
			case 2:
			   resultado = valida_data(valor);
			   break;
			case 3:
			   resultado = valida_email(valor);
			   break;
			case 4:
			   resultado = valida_string(valor);
		}
		if(!resultado && (status[i]==1 || (status[i]==0 && valor.length!=0))) {
			if(pos == -1) 
			   pos = i;
			mensagem+= "- " + nomescampos[i] + "\n";
			erro = true;
		}
	}
	if(erro) {
	   document.forms[form].elements[pos].focus();
	   alert(mensagem);
	}
	return !erro;
}
// tem certeza??
function TemCerteza(texto) {
	if(confirm(texto)) {
		return true;
	}
	return false;
}

function mascara_data(form, campo, data){ 
              var mydata = ''; 
              mydata = mydata + data; 
              if (mydata.length == 2){ 
                  mydata = mydata + '/'; 
                  document.forms[form].elements[campo].value = mydata; 
              } 
              if (mydata.length == 5){ 
                  mydata = mydata + '/'; 
                  document.forms[form].elements[campo].value = mydata; 
              } 
			  /*
              if (mydata.length == 10){ 
                  verifica_data(); 
              } */
          } 
           
          function verifica_data () { 

            dia = (document.forms[0].data.value.substring(0,2)); 
            mes = (document.forms[0].data.value.substring(3,5)); 
            ano = (document.forms[0].data.value.substring(6,10)); 

            situacao = ""; 
            // verifica o dia valido para cada mes 
            if ((dia < 01)||(dia < 01 || dia > 30) && (  mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) { 
                situacao = "falsa"; 
            } 

            // verifica se o mes e valido 
            if (mes < 01 || mes > 12 ) { 
                situacao = "falsa"; 
            } 

            // verifica se e ano bissexto 
            if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
                situacao = "falsa"; 
            } 
    
            if (document.forms[0].data.value == "") { 
                situacao = "falsa"; 
            } 
    
            if (situacao == "falsa") { 
                alert("Data inválida!"); 
                document.forms[0].data.focus(); 
            } 
          } 

// valida formulário
function valida_form_confirma(form, campos, nomescampos,tipos,status,msg1) {
	/*
	   form = posição do formulários (0,1,...)
	   campos = campos a verificar (0,1,2,...)
	   tipos = tipo de cada campo:
	   		1-inteiro;
			2-data;
			3-email;
			4-string;
	   status = 0 - não obrigatório, 1 - obrigatório
	*/
	var mensagem = "Por favor, verifique os seguintes campos\n\n";
	var erro = false;
	var pos = -1;
	for(var i=0;i<campos.length;i++) {
		resultado = true;
		valor = document.forms[form].elements[campos[i]].value;
		switch(tipos[i]) {
			case 1:
			   resultado = valida_inteiro(valor);
			   break;
			case 2:
			   resultado = valida_data(valor);
			   break;
			case 3:
			   resultado = valida_email(valor);
			   break;
			case 4:
			   resultado = valida_string(valor);
		}
		if(!resultado && (status[i]==1 || (status[i]==0 && valor.length!=0))) {
			if(pos == -1) 
			   pos = i;
			mensagem+= "- " + nomescampos[i] + "\n";
			erro = true;
		}
	}
	if(erro) {
	   document.forms[form].elements[pos].focus();
	   alert(mensagem);
	}
	else {
	   if(!TemCerteza(msg1)) {
		   return false;
	   }
	}
	return !erro;
}



var req; 
var idElemento = "atualiza"; // default

function loadXMLDoc(url) 
{ 
    req = null; 
	//idElemento = elemento;
    // Procura por um objeto nativo (Mozilla/Safari) 
    if (window.XMLHttpRequest) { 
        req = new XMLHttpRequest(); 
        req.onreadystatechange = processReqChange; 
        req.open("GET", url, true); 
        req.send(null); 
    // Procura por uma versao ActiveX (IE) 
    } else if (window.ActiveXObject) { 
        req = new ActiveXObject("Microsoft.XMLHTTP"); 
        if (req) { 
            req.onreadystatechange = processReqChange; 
            req.open("GET", url, true); 
            req.send(); 
        } 
    } 
} 

function processReqChange() 
{ 
    // apenas quando o estado for "completado" 
    if (req.readyState == 4) { 
        // apenas se o servidor retornar "OK" 
        if (req.status == 200) { 
            // procura pela div id="atualiza" e insere o conteudo 
            // retornado nela, como texto HTML 
			if(document.getElementById(idElemento)) {
				//alert(req.responseText);
               document.getElementById(idElemento).innerHTML = req.responseText; 
			}
        } else { 
            alert("Houve um problema ao obter os dados:\n" + req.statusText); 
        } 
    } 
} 

 function checaCPF (CPF) { 
    if (CPF.length != 11 || CPF == "00000000000" || CPF == "11111111111" || 
        CPF == "22222222222" ||    CPF == "33333333333" || CPF == "44444444444" || 
        CPF == "55555555555" || CPF == "66666666666" || CPF == "77777777777" || 
        CPF == "88888888888" || CPF == "99999999999") 
        return false; 
        soma = 0; 
    for (i=0; i < 9; i ++) 
        soma += parseInt(CPF.charAt(i)) * (10 - i); 
        resto = 11 - (soma % 11); 
    if (resto == 10 || resto == 11) 
        resto = 0; 
    if (resto != parseInt(CPF.charAt(9))) 
        return false; 
    soma = 0; 
    for (i = 0; i < 10; i ++) 
        soma += parseInt(CPF.charAt(i)) * (11 - i); 
    resto = 11 - (soma % 11); 
    if (resto == 10 || resto == 11) 
        resto = 0; 
    if (resto != parseInt(CPF.charAt(10))) 
        return false; 
        return true; 
  }  
