
function validaEntradaGeral(pVal,tipo,nomeCampo,obrigatorio){
	pVal.value = Trim(pVal.value);
	
	result = true;	
	var result = validaCaracEsp(pVal,nomeCampo);
	
	if(obrigatorio){
		if(!validaNaoVazio(pVal,nomeCampo)){
			return false;
		}
	}
	
	switch (tipo) {
		case "identificador":
			result = validaIdentificador(pVal);
			break;
		case "telefone":
			result = validaTelefone(pVal);
			break;
		case "cep":
			result = validaCEP(pVal);
			break;
		case "integer":
			result = validaNumero(pVal);
			break;
		case "date":
			result = validaData(pVal);
			break;
		case "money":
			result = validaMoney(pVal);
			break;
		case "email":
			result = validaEmail(pVal);
			break;
		case "nome": //nome de pessoa
			result = validaNomeProprio(pVal,nomeCampo);
			break;
		default:			
	}
	return result;
}


function validaNaoVazio(pVal,nomeCampo){
	if (pVal.value == ""){
		if(nomeCampo) {
			alert('O campo ' + nomeCampo + ' não pode ser vazio.');
		} else{
			alert('O campo não pode ser vazio.');
		}
		pVal.focus();		
		return false;
	}
	return true;
}

function validaIdentificador(pVal,nomeCampo){
	var reDigits = /[a-zA-Z0-9_]/;
	if (!reDigits.test(pVal.value)){
		if(nomeCampo) {
			alert('O campo '+nomeCampo+' deve conter somente números, letras e "_".');
		} else{
			alert('O campo deve conter somente números, letras e "_".');
		}
		
		pVal.select();		
		return false;
	}
	return true;
}

function validaTelefone(pVal){
	var reDigits = /^\d+$/;
	//pVal.value = pVal.value.replace("(","").replace(")", "").replace().replace("-", "")
	pVal.value = pVal.value.replace(/\(/g,"").replace(/\)/g, "").replace(/\-/g, "").replace(/\./g, "")
	if (!reDigits.test(pVal.value) || pVal.value.length > 10 || pVal.value.length < 8){
		alert('O telefone informado está inválido')
		pVal.select();		
		return false;
	}
	return true;
}

function validaCEP(pVal){
	var reDigits = /^\d+$/;
	//pVal.value = pVal.value.replace(".","").replace().replace("-", "")
	pVal.value = pVal.value.replace(/\./g,"").replace(/\-/g, "")
	if (!reDigits.test(pVal.value) && pVal.value.length != 8){
		alert('O CEP informado está inválido')
		pVal.select();		
		return false;
	}
	return true;
}

function validaMoney(pVal, nomeCampo){
	var reDigits = /^(-)?\d{1,3}(\.\d{3}){0,3}\,\d{2}$/;
	var msgFormato = "Informar o valor no formato 'nnn.nnn,nn')";
	if (!reDigits.test(pVal.value)){
		if(nomeCampo) {
			alert('O valor informado no campo '+nomeCampo+'  está inválido\n' + msgFormato);
		} else{
			alert('O valor monetário informado está inválido\n' + msgFormato);
		}
		
		pVal.select();		
		return false;
	}
	return true;
}

function validaNumero(pVal,nomeCampo){
	var reDigits = /^\d+$/;
	if (!reDigits.test(pVal.value)){
		if(nomeCampo) {
			alert('O campo ' + nomeCampo + ' deve conter somente números.');
		} else{
			alert('O campo deve conter somente números.')
		}		
		pVal.select();		
		return false;
	}
	return true;
}

function validaData(pVal){
	reDate = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
	if (!reDate.test(pVal.value)){
		alert('A data informada está inválida.')
		pVal.select();		
		return false;
	}
	return true;
}

function validaEmail(pVal){
	reEmail = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
	if (!reEmail.test(pVal.value)){
		alert('O e-mail informado está inválido.')
		pVal.select();		
		return false;
	}
	return true;
}

function validaNomeProprio(pVal,nomeCampo){
	carL = new CaracteresLatinos();
	//reNome = /^[A-Za-z]+[-A-Za-z ]*$/;
	reNome = new RegExp("^[A-Za-z]+[-A-Za-z " + carL.LATIN_CHARS + "]*$");
	if (!reNome.test(pVal.value)){
		if(nomeCampo) {
			alert('O campo ' + nomeCampo + ' está inválido.');
		} else{
			alert('O campo está inválido.');
		}
		pVal.select();		
		return false;
	}
	return true;
}

function validaCaracEsp(pVal,nomeCampo){

	var caracteres = new Array("'", "<", ">", "%", "=", "*", "--", '"', "%");
	var strerror = '';

	for (i = 0;i<caracteres.length;i++){
		if(pVal.value.indexOf(caracteres[i]) != -1){
			strerror = strerror + " " + caracteres[i] + " ";
		}
	}
	
	if (strerror != ''){
		if(nomeCampo) {
			alert('Os seguintes caracteres informados, no campo ' + nomeCampo + ', não são permitidos: ' + strerror);
		} else{
			alert('Os seguintes caracteres informados não são permitidos: ' + strerror);
		}
		pVal.select();
		return false
	}
	return true;

}

function Trim(str){
	return str.replace(/^\s+|\s+$/g,"");
}


function CaracteresLatinos(){
	this.LATIN_UC_CHARS = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ";  
	this.LATIN_LC_CHARS = "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý";
	this.LATIN_CHARS = this.LATIN_UC_CHARS + this.LATIN_LC_CHARS;
	return this;
}
