
function valida(referenciaElemento,label,validacao) {

	var validacoes = new Array();
	var toUnlock = new Array();
	
    toUnlock = false;
	

	// Abaixo a declaracao das expressoes regulares
	
	validacoes.alfabetico = /[a-z]/i;	
	validacoes.decoder = /[a-z]/i;	
	//validacoes.alfabetico = /^[a-zA-Z]*[^"]*[a-zA-Z]*$/i;	
	validacoes.alfanumerico =/[a-z_0-9]/i;
	validacoes.selectable =/[a-z_0-9]/i;
	//validacoes.alfanumerico = /^[a-z]*[^"']*[a-z]*$/i;	
	validacoes.texto = /[\w]/i;
	validacoes.numerico = /^\d*$/;
	validacoes.ano = /^\d*$/;
	validacoes.telefone = /^(\([1-9][1-9]\))?|[1-9][1-9]\s\d{3,4}([\-\s]?\d{4})$/;
	//validacoes.telefone = /^(\(?\d{2}\)?[\-\s]?)?\s?\d{3,4}[\-\s]?\d{4}$/;
	validacoes.data = /^\d{2}\/\d{2}\/\d{4}$/;
	validacoes.datanasc = /^\d{2}\/\d{2}\/\d{4}$/;
	validacoes.email = /^([a-zA-Z0-9._-]*)@[a-zA-Z0-9._-]+(\.[a-zA-Z0-9._-]*)+$/i;
	//validacoes.email = /(^[^"]*[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)+$/gi;
	//validacoes.email = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)+$/gi;
	validacoes.moeda = /^(R\$\s?)?\d{1,3}(\.?\d{3})*(\,\d{2})?$/;
	validacoes.cep = /^\d{5}(-?\d{3})$/;
	validacoes.horario = /^([0-1][0-9]|[0-9]|2[0-3])[:,h][0-5]\d[:,m][0-5]\d[h,m,s]?$/i;
	validacoes.uf = /^AC$|^AL$|^AP$|^AM$|^BA$|^CE$|^DF$|^ES$|^GO$|^MA$|^MT$|^MS$|^MG$|^PA$|^PB$|^PR$|^PE$|^PI$|^RJ$|^RN$|^RS$|^RO$|^RR$|^SC$|^SP$|^SE$|^TO$/i;
	validacoes.sexo = /m|f/i;
	validacoes.bairro = validacoes.alfabetico;
	validacoes.cidade = validacoes.alfabetico;
	validacoes.pais = validacoes.alfabetico;
	validacoes.cep_parte1 = validacoes.numerico;
	validacoes.cep_parte2 = validacoes.cep_parte1;
		
	// Completar a validação do cpf com o calculo do digito.
	validacoes.cpf =/(\d{3}\.?){2}(\d{3}-?)\d{2}$/i;

	// Fim da declaração das Expressões Regulares

	var valorCampo = referenciaElemento.value;
	var nomeCampo = referenciaElemento.name;
    
    
	if (valorCampo == null | valorCampo == "" ) {
		return
	}

	else {

		var expressao = validacoes[validacao];
		var validado = expressao.test(valorCampo);

		if(!validado){

			switch(validacao) {
			
				case 'selectable' :
				    
					alert('Você deve selecionar o Curso desejado no campo "' + label + '" para se Matricular.\nVeja um exemplo válido: Direito');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;
							
				case 'datanasc' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 01/12/2001');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;
				
				case 'data' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 01/12/2001');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;	

				case 'email' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: nome@email.com.br');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'telefone' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: (21)1234-5678');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'cep' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 22230-080');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'cep_parte1' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nSomente dígitos são aceitos.');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'cep_parte2' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nSomente dígitos são aceitos.');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'cpf' :
					//alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 99988855583');
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 99999999999');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;
					
				case 'numerico' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 000111222');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;


				case 'ano' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: 1970');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				case 'alfabetico' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: José Silva');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;
					
				case 'decoder' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\n');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;
				
				case 'alfanumerico' :
					alert('O valor digitado no campo "' + label + '" está incorreto.\nVeja um exemplo válido: Rua Rio Branco, 20');
					referenciaElemento.focus();
					referenciaElemento.select();
					return false;
					break;

				default:
					alert('O valor digitado no campo "' + label + '" está incorreto.\nFavor corrigir...');
					referenciaElemento.focus();
					referenciaElemento.select(); 
					return false;
					break;
			}
		} 
		else {

			switch(validacao) {

				case 'data':
					if (!funValidaData(valorCampo,'/','a')) {
								alert('O valor digitado no campo "' + label + '" está incorreto.\nFavor corrigir...');
								referenciaElemento.focus();
								referenciaElemento.select();
								return false					
					}
					break;
				case 'datanasc':
					if (!funValidaData(valorCampo,'/','b')) {
								alert('O valor digitado no campo "' + label + '" está incorreto.\nFavor corrigir...');
								referenciaElemento.focus();
								referenciaElemento.select();
								return false					
					}
					break;
				case 'cpf':
					if (!fun_ValidarCPF(valorCampo)) {
								alert('O valor digitado no campo "' + label + '" está incorreto.\nFavor corrigir...');
								referenciaElemento.focus();
								referenciaElemento.select();
								return false					
					}
					break;
				default:
					return true;
					break;
			}
		}
	}
}

meses = new Array(12);
meses = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
 
function eh_bissexto(ano) {
 if ( ((ano - 1996) % 4) == 0) return true;
 return false;
}
 
function funValidaData(data, separador , tipo) {
		aux = data;
		barras = 0;
		erro = 0;
		dia = 0;
		mes = 0;
		ano = 0;
		eh_barra = 1;
 
		for (var i=0; (i<aux.length) && (erro==0); i++) {
		 if (aux.charAt(i)==separador) {
		  if (eh_barra==0) {
		   barras++;
		   eh_barra = 1;
		  }
		  else erro = 1;
		 }
		 else {
		  a = parseInt(aux.charAt(i), 10);
		  if (isNaN(a)) erro = 1;
		  eh_barra = 0;
		 }
		}
		if (barras != 2) erro = 1;
		  
		if (erro==0) {
		 pos = aux.indexOf(separador);
		 pos2 = aux.indexOf(separador, pos+1);
		 dia = parseInt(aux.substring(0, pos), 10);
		 mes = parseInt(aux.substring(pos+1, pos2), 10);
		 ano = parseInt(aux.substring(pos2+1, aux.length), 10);
		 //alert(ano+ '/' + mes + '/' + dia);
		 if (ano<1900 || ano>2050) erro = 1;
		 else {
		  if (eh_bissexto(ano)) meses[1] = 29;
		  else meses[1] = 28;
		  if (mes<1 || mes>12) erro = 1;
		  else if (dia<1 || dia>meses[mes-1]) erro = 1;
		 }
		 /*if (tipo == "b") {
				hr = new Date();
				dd = hr.getDate();
				mm = hr.getMonth() + 1;
				aa = hr.getYear();
				//alert(aa + '/' + mm + '/' + dd);
				if (ano > aa) {
						erro = 1;
				}	
				else {
						if (mes > mm) {
							if (ano >= aa) erro = 1;
						}
						else {
							if ((dia >= dd) && (ano == aa) && (mes == mm)) erro = 1;
						}
				}
			}*/
		}
		if (erro==1) {
		 return false;
		}
	return true;
}


/* function funValidaData(valor) {
	var d = valor.substring(0, 2);// dia
	var m = valor.substring(3, 5);// mes
	var a = valor.substring(6, 11);// ano
	var g;

	//Bissexto
	if (m=="02"){
		g= a % 4;
		if (g) {
			if (d>=29){
				return false;
			}
		}
		else {
			if (d>29){
				return false;
			}
		}
	}
	return true;
} */


function fun_ValidarCPF(s) {
		var varFirstChr = s.charAt(0);
		var vaCharCPF = false;

		for ( var i=0; i<=10; i++ ) { 
			var c = s.charAt(i);
		  if( ! (c>="0")&&(c<="9") ) { 
					return false;
		  } 
					if( c!=varFirstChr ) vaCharCPF = true; 
		} 

		if( ! vaCharCPF ) { 
			return false;
		} 

		soma=0;
		for ( i=0; i<9; i++ ) { 
			soma += (10-i) * ( eval(s.charAt(i)) ); 
		} 
		digito_verificador = 11-(soma % 11);
		if ( (soma % 11) < 2 ) digito_verificador = 0;
		if ( eval(s.charAt(9)) != digito_verificador ) {
			return false;
		} 

		soma=0;
		for ( i=0; i<9; i++ ) {
			soma += (11-i) * ( eval(s.charAt(i)) ); 
		}
		soma += 2 * ( eval(s.charAt(9)) );
		digito_verificador = 11-(soma % 11);
		if ( (soma % 11) < 2 ) digito_verificador = 0;
		if ( eval(s.charAt(10)) != digito_verificador ) { 
			return false; 
		} 
		return true;
}



function verifica(target,valor,toLiberate) {
    if (document.getElementById(target).value == valor) {
        if (toLiberate != '') document.getElementById(toLiberate).disabled = true;
        alert('O campo ' + document.getElementById(target).name + ' não está preenchido corretamente');
        document.getElementById(target).focus();
    }    else {
        if (toLiberate != '') {
            document.getElementById(toLiberate).disabled = false;
            document.getElementById(toLiberate).focus();
        }
    }
}

