function validarCpfCnpj(varField, strFieldName, blnRequired){
	if(trim(varField.value) == ""){
		if(blnRequired){
			alert("O campo " + strFieldName + " é obrigatório.");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var numero = extrairNumeros(trim(varField.value));
	if(numero.length == 11){
		return validarCpf(varField, strFieldName, blnRequired);
	}else if(numero.length == 14){
		return validarCnpj(varField, strFieldName, blnRequired);
	}else{
		alert("O campo " + strFieldName + " não possui um número válido.");
		varField.select();
		varField.focus();
		return false;
	}
}

function validarCpf(varField, strFieldName, blnRequired){
	if(trim(varField.value) == ""){
		if(blnRequired){
			alert("O campo " + strFieldName + " é obrigatório.");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var valido = true;
	var cpf = extrairNumeros(trim(varField.value));
	if(cpf.length!=11||
	cpf=='00000000000'||cpf=='11111111111'||cpf=='22222222222'||cpf=='33333333333'||cpf=='44444444444'||
	cpf=='55555555555'||cpf=='66666666666'||cpf=='77777777777'||cpf=='88888888888'||cpf=='99999999999'||
	cpf=='01234567890'||cpf=='12345678909')
		valido = false;
	if (valido){
		var d1,d4,xx,nCount,resto,digito1,digito2,check;
		d1 = 0;	d4 = 0;	xx = 1;
		for (nCount = 0; nCount < (cpf.length - 1); nCount++) {
			d1 = d1 + (11 - xx) * cpf.substring(nCount, nCount + 1);
			d4 = d4 + (12 - xx) * cpf.substring(nCount, nCount + 1);
			xx++;
		}
		resto = (d1 % 11);
		if (resto < 2)
			digito1 = 0;
		else
			digito1 = 11 - resto;
		d4 = d4 + 2 * digito1;
		resto = (d4 % 11);
		if (resto < 2)
			digito2 = 0 ;
		else
			digito2 = 11 - resto;
		check = digito1 + digito2;
		valido = check == cpf.substring(cpf, cpf.length - 1, cpf.length + 1);
	}
	if(valido){
		return true;
	}else{
		alert("O campo " + strFieldName + " não possui um número válido.");
		varField.select();
		varField.focus();
		return false;
	}
}

function validarCnpj(varField, strFieldName, blnRequired) {
	if(trim(varField.value) == ""){
		if(blnRequired){
			alert("O campo " + strFieldName + " é obrigatório.");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var valido = true;
	var cnpj = extrairNumeros(trim(varField.value));
	if(cnpj.length < 14){
		cnpj = "00000000000000" + cnpj;
		cnpj = cnpj.substring(cnpj.length - 14, cnpj.length);
	}
	if(valido){
		var n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14;
		var d1,d2;
		var digitado, calculado;
		n1 = cnpj.substring(0,1);
		n2 = cnpj.substring(1,2);
		n3 = cnpj.substring(2,3);
		n4 = cnpj.substring(3,4);
		n5 = cnpj.substring(4,5);
		n6 = cnpj.substring(5,6);
		n7 = cnpj.substring(6,7);
		n8 = cnpj.substring(7,8);
		n9 = cnpj.substring(8,9);
		n10 = cnpj.substring(9,10);
		n11 = cnpj.substring(10,11);
		n12 = cnpj.substring(11,12);
		n13 = cnpj.substring(12,13);
		n14 = cnpj.substring(13,14);
		d1 = n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
		d1= 11-(d1 % 11);
		if (d1 >= 10) 
			d1=0;
		d2 = d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
		d2 = 11-(d2 % 11);
		if (d2 >= 10) 
			d2=0;
		calculado = d1 + d2;
		digitado = n13*1 + n14*1;
		valido = calculado == digitado
	}
	if(valido){
		return true;
	}else{
		alert("O campo " + strFieldName + " não possui um número válido.");
		varField.select();
		varField.focus();
		return false;
	}
}

function extrairNumeros(texto) {
	var novo = ""
	for (var i = 0; i < texto.length; i++) {
		caracter = texto.charAt(i)
		if (ValidateInteger(caracter))
			novo = novo + caracter
	}
	return (novo)
}

function ValidateInteger(expr){
	var valids = "0123456789";
	if (expr.length == 0)
		 return false;
	for (i = 0; i < expr.length; i++){
		if (valids.indexOf(expr.charAt(i)) == -1)
			return false;
	}
	return true;
}

function trim(sValor){
  	var indexA = -1;
  	var indexB;
  	var ch;
  	for(i = 0;  i < sValor.length;  i++){
	 	if(sValor.charAt(i) != " " && sValor.charCodeAt(i) != 160){
		  	indexA = i;
		  	break;
	  	}
  	}
  	if (indexA != -1){
	 	for (j = sValor.length - 1; j >= indexA; j--){
		 	if(sValor.charAt(j) != " " && sValor.charCodeAt(j) != 160){
		    	indexB = j;
		    	break;
	     	}
	  	}
	  	sValor = sValor.substring(indexA,(indexB + 1));
  	}else{
	  	sValor = "";
  	}
  	return (sValor);	    
}

function validarTexto(varField, strFieldName, blnRequired){
	varField.value = trim(varField.value);
	if(blnRequired && varField.value.length == 0){
		alert("O campo \"" + strFieldName + "\" é obrigatório.");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("&") != -1){
		alert("Nao é permitido o uso do caractere \"&\" no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("%") != -1){
		alert("Nao é permitido o uso do caractere \"%\" no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("\"") != -1){
		alert("Nao é permitido o uso de aspas no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("'") != -1){
		alert("Nao é permitido o uso de aspas no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else{
		return true;
	}
}

function validarData(varField, strFieldName, blnRequired){
	if(trim(varField.value).length == 0){
		if(blnRequired){
			alert("O campo \"" + strFieldName + "\" é obrigatorio!");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var sData = trim(varField.value) + "  /  /    ";
	var bRet = true;
	var dia = sData.substr(0,2);
	var mes = sData.substr(3,2);
	var ano = sData.substr(6,4);
	if(!isNumber(dia) || !isNumber(mes) || !isNumber(ano)){
		alert("Formato de data invalido no campo \"" + strFieldName + "\"!");
		varField.select();
		varField.focus();
		return false;
	}else{
		var dData = new Date(ano, mes-1, dia);
		var dataMinima = new Date(1900, 01 - 1, 01);
		if(dData.getDate() != Number(dia) || dData.getMonth() != Number(mes-1) || dData.getFullYear() != Number(ano)){
			alert("Data invalida no campo \"" + strFieldName + "\"!");
			varField.select();
			varField.focus();
			return false;
		}else if(dData < dataMinima){
			alert("A data no campo \"" + strFieldName + "\" deve ser igual ou posterior a 01/01/1900!");
			varField.select();
			varField.focus();
			return false;
		}
	}
	return true;
}

function validarEmail(varField, strFieldName, blnRequired){
	var email = trim(varField.value);
	if(email.length == 0){
		if(blnRequired){
			alert("O campo \"" + strFieldName + "\" é obrigatorio!");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var i, j;
	var valchars = "_-@.";
	if(!validarTexto(varField, strFieldName, blnRequired)){
		return false;
	}else if(getFirstSpecialChar(email, valchars) != ""){
		alert("O caractere especial \"" + getFirstSpecialChar(email, valchars) + "\" nao e valido para emails.");
		varField.select();
		varField.focus();
		return false;
	}else if(email.indexOf("@") == -1){
		alert("Um email valido precisa conter um caractere \"@\".");
		varField.select();
		varField.focus();
		return false;
	}else if(email.indexOf("@") != email.lastIndexOf("@")){
		alert("Enderecos de email nao podem conter mais que um caractere \"@\".");
		varField.select();
		varField.focus();
		return false;
	}else if(email.indexOf("@") == 0){
		alert("Enderecos de email precisam conter uma conta antes do caractere \"@\".");
		varField.select();
		varField.focus();
		return false;
	}else if(email.indexOf("@") == email.length-1){
		alert("Enderecos de email precisam conter um dominio apos o caractere \"@\".");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

function validarNumeroTelefone(varField, strFieldName, blnRequired){
	var sTelefone = trim(varField.value);
	var nTelefone = "";
	for(var i = 0; i < sTelefone.length; i++){
		if(sTelefone.charAt(i) != "-")
			nTelefone += sTelefone.charAt(i);
	}
	if(sTelefone.length == 0){
		if(blnRequired){
			alert("O campo \"" + strFieldName + "\" é obrigatorio!");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}else if(!isNumber(nTelefone) || sTelefone.length != 9 || nTelefone.length != 8 || sTelefone.charAt(4) != "-"){
		alert("O campo \"" + strFieldName + "\" deve estar no formato \"9999-9999\"!");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

function phoneMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length == 4){
		varField.value += "-";
	}
}

function dateMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length == 2 || varField.value.length == 5){
		varField.value += "/";
	}
}

function isNumber(number){
	var checkOK = "0123456789";
	var ch;
	var allValid = true;
	var allNum = "";
	for (i = 0;  i < number.length;  i++){
		ch = number.charAt(i);
		for (j = 0;  j < checkOK.length;  j++){
			if (ch == checkOK.charAt(j)){
				break;
			}
		}
		if (j == checkOK.length){
			allValid = false;
			break;
		}
		allNum += ch;
	}
	return allValid;
}

function getFirstSpecialChar(string, acceptable){
	var checkOK = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + acceptable;
	var allValid = true;
	var allChars = "";
	for(i = 0;  i < string.length;  i++){
		for (j = 0;  j < checkOK.length;  j++){
			if (string.charAt(i) == checkOK.charAt(j)){
				break;
			}
		}
		if (j == checkOK.length){
			return string.charAt(i);
		}
	}
	return "";
}
