
function valida(valorCampo,label,validacao) {

	var validacoes = new Array();

	// Abaixo a declaracao das expressoes regulares

	validacoes.alfabetico = /[a-z]/i;
	validacoes.decoder = /[a-z]/i;
	validacoes.alfanumerico =/[a-z_0-9]/i;
	validacoes.texto = /[\w]/i;
	validacoes.numerico = /^\d*$/;
	validacoes.telefone = /^(\d{2,3}|\(\d{2,3}\))?[ ]?\d{3,4}[-]?\d{3,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.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.sangue = /^A+|^A-|^AB+|^AB-|^B+|^B-|^O+|^O-/i;

	// 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 expressao = validacoes[validacao];
	var validado = expressao.test(valorCampo);
//	alert(validado+' tipos');
	if(!validado)
	{
		switch(validacao) 
		{

			case 'sangue' :
				alert("Selecione o seu tipo sanguineo. ");
				return false;
			
			case 'datanasc' :
				alert("O valor digitado no campo " + label + " esta incorreto.\nVeja um exemplo valido: 01/12/2001");
				return false;
			break;

			case 'data' :
				alert("O valor digitado no campo " + label + " esta incorreto.\nVeja um exemplo valido: 01/12/2001");
				return false;
			break;

			case 'email' :
				alert("O valor digitado no campo " + label + " esta incorreto.\nVeja um exemplo valido: nome@email.com.br");
				return false;
			break;

			case 'telefone' :
				alert("O valor digitado no campo " + label + " esta incorreto.\nVeja um exemplo valido: (21) 1234-5678");
				return false;
			break;

			case 'cep' :
				alert("O valor digitado no campo " + label + " esta incorreto. \nPreencha sem pontos ou hifen.\n Veja um exemplo valido: 21111000");
				return false;
			break;

			case 'cpf' :
				alert("O valor digitado no campo " + label + " esta incorreto.\n Preencha sem pontos ou hifen. \nVeja um exemplo valido: 99999999999");
				return false;
			break;

			case 'numerico' :
				alert("O valor digitado no campo " + label + " esta incorreto.\n Utilize apenas numeros");
				return false;
			break;

			case 'alfabetico' :
				alert("O valor digitado no campo " + label + " esta incorreto.");
				return false;
			break;

			case 'decoder' :
				alert("O valor digitado no campo " + label + " esta incorreto.\n");
				return false;
			break;

			case 'alfanumerico' :
				alert("O valor digitado no campo " + label + " esta incorreto.");
				return false;
			break;

			default:
				alert("O valor digitado no campo " + label + " esta incorreto.");
				return false;
			break;
		}
	}
	else 
	{
		switch(validacao) 
		{
			case 'data':
				if (!funValidaData(valorCampo,'/','a')) 
				{
					alert("O valor digitado no campo " + label + " esta incorreto.");
					return false
				}
			break;
			
			case 'datanasc':
				if (!funValidaData(valorCampo,'/','b')) 
				{
					alert("O valor digitado no campo " + label + " esta incorreto.");
					return false
				}
			break;
			
			case 'cpf':
				if (!fun_ValidarCPF(valorCampo)) {
					alert("O valor digitado no campo " + label + " esta incorreto.");
					return false
				}
			break;
		}
	}
	return true;
}

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;
}

/** 
* @desc  Função de validação de CPF 
* @return Retorna true caso CPF for válido e false caso contrário
*			Exibe alert de erros
*/
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);
		if (ano<1900 || ano>2050) erro = 1;
		else {
			/*
			Verifica se o ano é bisexto
			*/
			meses[1] = ((ano - 1996) % 4) == 0 ? 29 : 28;
			/*
			Verifica se o mes é valido
			*/
			if (mes<1 || mes>12) erro = 1;
			else if (dia<1 || dia>meses[mes-1]) erro = 1;
		}
	}
	if (erro==1) {
		return false;
	}
	return true;
}

/** 
* @desc  Função de validação de CPF 
* @return Retorna true caso CPF for válido e false caso contrário
*			Exibe alert de erros
*/
function fun_ValidarCPF(cpf) {
	erro = new String;
	if (cpf.length < 11)
	{
		erro += "Numero de digitos invalidos! \n\n";
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(cpf)){ 
		erro += "CPF suporta apenas numeros! \n\n";
	}
	if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
		erro += "CPF invalido!"
	}
	var a = [];
	var b = new Number;
	var c = 11;
	for (i=0; i<11; i++)
	{
		a[i] = cpf.charAt(i);
		if (i < 9) b += (a[i] * --c);
	}
	if ((x = b % 11) < 2) 
	{ 
		a[9] = 0;
	}
	else 
	{
		a[9] = 11-x; 
	}
	b = 0;
	c = 11;
	for (y=0; y<10; y++) b += (a[y] * c--);
	if ((x = b % 11) < 2) 
	{ 
		a[10] = 0; 
	} 
	else 
	{ 
		a[10] = 11-x; 
	}
	if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
		erro +="Digito verificador invalido!";
	}
	if (erro.length > 0){
		alert(erro);
		return false;
	}
	return true;
}