// valida numero inteiros ou não
function valida_numero(numero,inteiro) {
	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(inteiro && numero!=Math.round(numero))
		return false;
		
	return true;

}

// verifica se um 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 uma data
function valida_data(data) {
	var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})\2(\d{4})$/;
    
	var datadiv = data.match(datePat);

   	if (datadiv==null)
		return false;
	
	var dia = datadiv[1];
	var mes = datadiv[3];
	var ano = datadiv[4];

	if( (dia < 1) || (dia > 31) || (mes < 1) || (mes > 12) || (ano < 1901) || (ano > 2100) )
	 return false;

	if(mes==2)
	 if(dia>29)
	  return false;
		else
			if(dia==29 && !ano_bi(ano))
				return false;

	return true;

}

// valida CEP
function valida_cep(cep) {
	if(cep.length>9 || (cep.indexOf("-")==-1 && cep.length>8))
		return false;
	
	var pat = /((\d{5})(-)(\d{3}))|(\d{8})/;
	
	var cepdiv = cep.match(pat);
	
	if(cepdiv==null)
		return false;
	return true;
}


// Calculo do CNPJ 
function valida_cnpj(cnpj) {
	var erro = true; 
	var aux_cnpj = "";	
	var cnpj1=0,cnpj2=0;
	for(j=0;j<cnpj.length;j++)
		if(cnpj.substr(j,1)>="0" && cnpj.substr(j,1)<="9")
			aux_cnpj += cnpj.substr(j,1);
	if(aux_cnpj.length!=14)
		erro = false;
	else {
		cnpj1 = aux_cnpj.substr(0,12);
		cnpj2 = aux_cnpj.substr(aux_cnpj.length-2,2);
		fator = "543298765432";
		controle = "";
		for(j=0;j<2;j++) {
			soma = 0;
			for(i=0;i<12;i++) 
				soma += cnpj1.substr(i,1) * fator.substr(i,1);
			if(j==1) soma += digito * 2;
			digito = (soma * 10) % 11;
			if(digito==10) digito = 0;
			controle += digito;
			fator = "654329876543";
		} 
		if(controle!=cnpj2)
			erro = false;
	} 
	return erro;
}

// Validação do CPF
function valida_cpf(cpf) {
	var cpf = new String(cpf);
    var aux_cpf = "";
	
	if(cpf.length!=11)
		return false;
		
    for(j=0;j<cpf.length;j++)
  		if(cpf.substr(j,1)>="0" && cpf.substr(j,1)<="9")
   			aux_cpf += cpf.substr(j,1);
	if(aux_cpf.length!=11)
		return false;
    else {
    	var cpf1 = String(aux_cpf);
    	var cpf2 = cpf.substr(cpf.length-2,2);
      	var controle = "";
      	var start = 2;
      	var end = 10;
      	for(var i=1;i<=2;i++) {
      		var soma = 0;
      		for(j=start;j<=end;j++)
      			soma += cpf1.substr((j-i-1),1)*(end+1+i-j);
        	if(i==2)
          		soma += digito * 2;
        	digito = (soma * 10) % 11;
        	if(digito==10)
          		digito = 0;
        	controle += digito;
        	start = 3;
        	end = 11;
      	}
      	if(controle!=cpf2)
        	return false;
    }
	
	return true;
}


// Esta é uma função simples para validar emails
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 uma string em particular (tipo login ou senha)
function valida_string(string) {
	str = new String(string);
	if(str.length<4)
		return false;
	if(str.indexOf(" ")!=-1)
		return false;

	var chars = "@#$&[]()/\\\{}!^:'\"";

	for(var i=0;i<chars.length;i++) {
		if(str.indexOf(chars.substr(i,1))!=-1) {
			return false;
		}
	}
		
	return true;

}

// Valida o numero do Cartão de crédito
function valida_cartao(numero) {
	var str = new String(numero);

	if(str.length==0)
		return false;

	var peso = (str.length%2==0) ? 2 : 1;
	var soma = 0;
	
	for(var i=0;i<str.length;i++) {
		num = str.substr(i,1);
		vlr = num*peso;
		soma+= (vlr>9) ? vlr-9 : vlr;
		peso = (peso==2) ? 1 : 2;
	}

	return (soma%10==0 && soma!=0);
}

// Valida a Data de validade do cartão (mm/aa)
function valida_dtvalidade(data) {
	var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})$/;
	var dtdiv = data.match(datePat);
	
	if(dtdiv==null)
		return false;
	
	var dia = 31;
	var mes = parseInt(dtdiv[1]);
	var ano = parseInt(dtdiv[3]);
	
	if(mes<1 || mes>12 || ano<01)
		return false;
	
	var data = new Date();
	var mes_at = data.getMonth();
	var ano_at = data.getYear();
	mes_at++;
	ano+=2000; 
	
	var anomes = ano*100+mes;
	var anomes_at = ano_at*100+mes_at;
	
	if(anomes<anomes_at)
		return false;
	
	return true;		
}

function retira_car(numero) {

	var exp = /^\$|\./g ;

	numero = numero.replace(exp, "");
	
	return numero;

}

function valida_form(form,campos,nomescampos,tipos,status) {
	/*
	form = posição do formulário (0,1,...)
	campos = campos a verificar (0,1,2,...)
	tipos = tipo de cada campo:
			 	1-inteiro
				2-decimal
				3-data
				4-email
				5-cpf
				6-cnpj
				7-cep
				8-string
				9-login/senha
				10-confirmação de senha 
				11-Cartão de Crédito
				12-Validade do Cartão (mes/ano)
	status = 0 - não obrigatório, 1 - obrigatório
	*/

	var mensagem = "Os seguintes campos estão incorretos\n\n";
	var erro = false;
	
	form++;  
		
	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_numero(valor,true);
			if(valor==0 && status[i]==1)
				resultado=false;
			document.forms[form].elements[campos[i]].value = retira_car(valor);
			break;
		case 2:
			resultado = valida_numero(valor,false);
			document.forms[form].elements[campos[i]].value = retira_car(valor);			
			break;
		case 3:
			resultado = valida_data(valor);
			break;
		case 4:
			resultado = valida_email(valor);
			break;
		case 5:
			resultado = valida_cpf(soNumeros(valor));
			break;
		case 6:
			resultado = valida_cnpj(valor);
			break;
		case 7:
			resultado = valida_cep(soNumeros(valor));
			break;
		case 8:
			resultado = (valor.length==0) ? false : true;
			break;
		case 9:
			resultado = valida_string(valor);
			break;
		case 10:
			resultado = valida_string(valor);
			if(resultado)
				resultado = (valor==document.forms[form].elements[campos[i-1]].value);
			break;
		case 11:
			resultado = valida_cartao(valor);
			break;
		case 12:
			resultado = valida_dtvalidade(valor);
			break;
		}
		
		if(!resultado && (status[i]==1 || (status[i]==0 && valor.length!=0))) {
			mensagem+= "- " + nomescampos[i] + "\n";
			erro = true;
		}
		
	}

	if(erro)
		alert(mensagem);
		
	return !erro;

}

function limpar(form,campos){
 	form++;
	for(var i=0;i<campos.length;i++) {
		document.forms[form].elements[campos[i]].value = "";
	}
 	document.forms[form].elements[campos[0]].focus();
}

function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}

function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}
	
function cep(v){
    v=v.replace(/D/g,"")
    v=v.replace(/^(\d{5})(\d)/,"$1-$2")
    return v
}

function telefone(v){
    v=v.replace(/\D/g,"")                 
    v=v.replace(/^(\d\d)(\d)/g,"($1) $2") 
    v=v.replace(/(\d{4})(\d)/,"$1-$2") 
    return v
}

function soNumeros(v){
    return v.replace(/\D/g,"")
}

function data(v){
    v=v.replace(/\D/g,"")             
    v=v.replace(/(\d{2})(\d)/,"$1/$2")
    v=v.replace(/(\d{2})(\d)/,"$1/$2")
    v=v.replace(/(\d{4})(\d)/,"$1/$4")
    return v
}

function DATA(evento, objeto){
	var keypress=(window.event)?event.keyCode:evento.which;
	campo = eval (objeto);
	if (campo.value == '00/00/0000')
	{
		campo.value=""
	}

	caracteres = '0123456789';
	separacao1 = '/';
	conjunto1 = 2;
	conjunto2 = 5;
	if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (10))
	{
		if (campo.value.length == conjunto1 )
		campo.value += separacao1;
		else if (campo.value.length == conjunto2)
		campo.value += separacao1;
	}
	else
		event.returnValue = false;
}

function CPF(evento, objeto){
	var keypress=(window.event)?event.keyCode:evento.which;
	campo = eval (objeto);
	if (campo.value == '000.000.000-00')
	{
		campo.value=""
	}

	caracteres = '0123456789';
	separacao1 = '.';
	separacao2 = '-';
	conjunto1 = 3;
	conjunto2 = 7;
	conjunto3 = 11;
	if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (14))
	{
		if (campo.value.length == conjunto1 )
		campo.value += separacao1;
		else if (campo.value.length == conjunto2)
		campo.value += separacao1;
		else if (campo.value.length == conjunto3)
		campo.value += separacao2;
}
	else
		event.returnValue = false;
}

function CEP(evento, objeto){
	var keypress=(window.event)?event.keyCode:evento.which;
	campo = eval (objeto);
	if (campo.value == '00.000-000')
	{
		campo.value=""
	}

	caracteres = '0123456789';
	separacao1 = '.';
	separacao2 = '-';
	conjunto1 = 2;
	conjunto2 = 6;
	if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (10))
	{
		if (campo.value.length == conjunto1 )
		 campo.value += separacao1;
		else if (campo.value.length == conjunto2)
		 campo.value += separacao2;
    }
	else
		event.returnValue = false;
}

function FONE(evento, objeto){
	var keypress=(window.event)?event.keyCode:evento.which;
	campo = eval (objeto);
	if (campo.value == '(00) 0000-0000')
	{
		campo.value=""
	}

	caracteres = '0123456789';
	separacao1 = '(';
	separacao2 = ') ';
	separacao3 = ' '; 
	separacao3 = '-'
	conjunto1 = 0;
	conjunto2 = 3;
	conjunto3 = 9;
    if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (14))
	{
		if (campo.value.length == conjunto1 )
		campo.value += separacao1;
		else if (campo.value.length == conjunto2)
		campo.value += separacao2;
		else if (campo.value.length == conjunto3)
		campo.value += separacao3;
}
	else
		event.returnValue = false;
}

/*
function SONUMEROS(dados) {
	var digits="0123456789";
    var campo_temp;
	var i; 
    for (i = 0; i < dados.value.length; i++){
     campo_temp=dados.value.substring(i,i+1)    
     if (digits.indexOf(campo_temp)==-1){
      dados.value = dados.value.substring(0,i);
      break;
     }
   }
}

*/

function SONUMEROS(evento, objeto){
	var keypress=(window.event)?event.keyCode:evento.which;
	campo = eval(objeto);
	caracteres = '0123456789';
	if (caracteres.search(String.fromCharCode(keypress))==-1){							 
 	 event.returnValue = false;
	}
}