function valida(referenciaElemento,validacao) {

	var validacoes = new Array();

	// Abaixo a declaracao das expressoes regulares

	validacoes.alfabetico = /[a-z]/i;
	validacoes.alfanumerico = /^[a-z_0-9]*$/i;
	validacoes.texto = /[\w]/i;
	validacoes.numerico = /^\d*$/;
	validacoes.ddd = /^\d{3}$/;
	validacoes.tel = /^\d{7,8}$/;
	validacoes.telefone = /^(\(?\d{2}\)?)?\s?\d{3,4}[\-\s]?\d{4}$/;
	validacoes.data = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(20|1[9])[0-9][0-9]$/;
	validacoes.datanasc = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
	validacoes.mesano = /^\d{1,2}\/\d{4}$/;
	validacoes.email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
	validacoes.moeda = /^(R\$\s?)?\d{1,3}(\.?\d{3})*(\,\d{2})?$/;
	validacoes.ini_cep = /^\d{5}$/;
	validacoes.fim_cep = /^\d{3}$/;
	validacoes.cep = /^\d{5}(-?\d{3})$/;
	validacoes.horario = /^(0[1-9]|1[0-9]|2[0-4]):[0-5][0-9]$/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.cpf =/(\d{3}\.?)(\d{3}\.?)(\d{3}-?)\d{2}$/i;
	validacoes.dia = /^(0[1-9]|[12][0-9]|3[01])$/;
	validacoes.mes = /^(0[1-9]|1[012])$/;
	validacoes.ano = /^(20|1[9])[0-9][0-9]$/;
								
	// Fim da declaração das Expressões Regulares

	var textos = new Array();
								
	// Abaixo a declaracao dos textos de retorno
								
	textos.alfabetico	= "Esse campo só permite letras";
	textos.alfanumerico = "Esse campo só permite letras e números";
	textos.texto		= "Esse campo só permite texto";
	textos.numerico		= "Esse campo só permite números";
	textos.ddd			= "O DDD deve ter 2 números";
	textos.tel			= "O telefone deve ter entre 7 e 8 números";
	textos.telefone		= "O telefone digitado não é válido";
	textos.data			= "A data digitada não é valida. Ex : 31/12/2001";
	textos.datanasc		= "A data de nascimento digitada não é valida";
	textos.mesano		= "O mês/ano está inválido . Ex: 12/2000.";
	textos.email		= "O e-mail digitado não é válido";
	textos.moeda		= "O tipo de moeda digitada não é valida";
	textos.ini_cep		= "A primeira parte do cep deve ter 5 números";
	textos.fim_cep		= "A segunda parte do cep deve ter 3 números";
	textos.cep			= "O cep digitado não é válido";
	textos.horario		= "O horário digitado não é válido. Ex : 01:59";
	textos.uf			= "O estado digitado não é válido";
	textos.sexo			= "O sexo digitado não é válido";
	textos.cpf			= "O cpf digitado não é válido";
	textos.dia			= "O dia digitado não é válido";
	textos.mes			= "O mês digitado não é válido";
	textos.ano			= "O ano digitado não é válido";

	// Fim da declaração dos textos de retorno

	var valorCampo = referenciaElemento.value;
	var nomeCampo = referenciaElemento.name;
	var idCampo = referenciaElemento.id;
		idCampo = idCampo.replace("ddd_","");
			
	if (valorCampo == null | valorCampo == "" ) {
		return false
	} else {
		var expressao = validacoes[validacao];
		var texto = textos[validacao];
		var validado = expressao.test(valorCampo);

		if(!validado){
			referenciaElemento.focus();
			referenciaElemento.select();
			eval(idCampo+'_err').innerHTML = texto;
			return false
		} else {
			eval(idCampo+'_err').innerHTML = '<img src="/ar/img/trans.gif" width="1" height="1" />';
			switch(validacao) {
				case 'datanasc':
							if (!funValidaData(valorCampo,'/','b')) {
								referenciaElemento.focus()
								referenciaElemento.select()
								return false
							}
							else {
								return true
							}
				break;
				case 'cpf':
							if (!validaCPF(valorCampo)) {
								referenciaElemento.focus()
								referenciaElemento.select()
								alert("O cpf não é válido");
								return false
							}
							else {
								return true
							}
				break;
				default:
							return true
				break;
			}
		}
	}
}


//FUNÇÃO validaCPF(cpf)
function validaCPF(cpf){ 
	var i; 
	s = cpf; 
	
	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){ 
		//alert("O CPF está Inválido!");
		return false; 
	} 
	d1 = 11 - (d1 % 11); 
	if (d1 > 9) d1 = 0; 
	if (dv.charAt(0) != d1) { 
		//alert("O CPF está Inválido!");
		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) { 
		//alert("O CPF está Inválido!");
		return false; 
	} 
	return true;
} 