<!--//
var erro;		//variável global q guarda o status do erro
var frm;

function validaForm(nomeform, vetor){
	//os parametros passados para a funcao: nome_do_campo|tipo_de_validacao|"label"_para_campo. Para validar mais de um campo, passa-los separados por virgulas.
	var i, campos, params;

	if(vetor.indexOf(",") == -1) {
		campos = vetor;
		getParams(nomeform, campos);
	} else {
		campos = vetor.split(",");
		for (i=0; i < campos.length; i++) {
			getParams(nomeform, campos[i]);
			if(erro){break;}
		}
	}

	if(erro == false) {
		for (z=0; z < frm.elements.length; z++)
			frm.elements[z].disabled = false;
	}
	return !(erro);
}



/************************************************************************************************
*  Responsável pela chamada de cada um dos tipos de validação									*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function getParams(nomeForm, campos) {

	var params = campos.split("|");
	var tipoValidacao = params[1].toUpperCase();
	frm = eval(nomeForm);
	var	field = eval(nomeForm + '.' + params[0]);
	var label = params[2];

	if ( !field.disabled ) {

		switch (tipoValidacao) {

			case 'ISNULL':
				//Valida se o campo está em branco
				if (field.length && (!field.type) )
					xNull(field,label);
				else
					isNull(field, label);
				break;

			case 'ISWORD':
				//Valida campos de username
				isWord(field, label);
				break


			case 'ISXNULL':
				//Valida radios e checkboxes
				xNull(field, label);
				break;

			case 'ISEMAIL':
				//Valida se o campo contém um e-mail válido
				isEmail(field, label);
				break;

			case 'PASSWORD':
				//Valida se dois campos contém o mesmo valor
				field2 = eval(nomeForm + '.' + params[2]);
				compareFields(field, field2);
				break;

			case 'ISNUMERIC':
				//Valida se o campo contém um valor numérico
				isNumeric(field, label);
				break;

			case 'ISNATURAL':
				//Valida se o campo contém um valor positivo
				isNatural(field, label);
				break;

			case 'LEN':
				//Valida se o length do campo é igual ao parâmetro "requiredLen" da tag <input>
				Len(field, label);
				break;

			case 'ISCPF':
				//Valida se é um cpf válido
				isCPF(field.value);
				setFocus(field);
				break;

			case 'ISCNPJ':
				//Valida se é um cgc válido
				erro = !isCGC(field.value);
				setFocus(field);
				break;

			case 'ISTIME':
				//Valida se é um horário no formato hh:mm
				isTime(field, label);
				break;

			case 'ISDATE':
				//Valida se é uma data no formato dd/mm/aa
				isDate(field, label);
				break;

			case 'MAXLEN':
				//MaxLength(para textareas)
				maxLen(field, label);
				break;

			case 'ISRG':
				//Valida se é um rg válido
				isRG(field.value);
				break;

			case 'ISCEP':
				//Valida se é um cpf válido
				isCEP(field,label);
		}
	}
}


/************************************************************************************************
*  Validação de campos username																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 30/01/2003 - 17:44																*
************************************************************************************************/
function isWord(campo, alias) {

	erro = false;
	var re = /^[a-zA-Z_][a-zA-Z_0-9]+$/;
	var msg;

	if ( campo.value.match(re) == null ) {
		erro = true;
		msg = "O campo '"+ alias +"' não deve conter espaços!";
		errorMsg(campo, msg);
	}

}


/************************************************************************************************
*  Maxlength para campos textarea																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function maxLen(campo, alias) {

	var msg;
	erro = false;

	if (campo.value.length > campo.maxlength) {
		erro = true;
		msg = "O campo '"+ alias +"' deve conter, no máximo, "+ campo.maxlength +" caracteres!";
		errorMsg(campo, msg);
	}
	return !erro;

}





/************************************************************************************************
*  Comparaçã se campos senha																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function compareFields(field1, field2, msg) {

	erro = false;
	if (!msg) msg = 'As senhas digitadas não conferem!';

	if (field1.value != field2.value) {
		erro = true;
		errorMsg(field1, msg);
	}
	return !erro;

}




/************************************************************************************************
*  auto-complete para campos de CEP																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function setCep() {

	var ignoreKeys = Array(8,13,16,17,35,36,37,39,46);
	var fld = window.event.srcElement;
	var frm = fld.form;
	var str = fld.value.replace(/\-/g,'');

	if (str) {
		if ( !inArray(ignoreKeys, window.event.keyCode) ) {
			if (str.length == 5)
				str += '-';
			else if (str.length > 5)
				str = str.substr(0,5) +'-'+ str.substr(5,3);
			fld.value = str;
		}
	}
}




/************************************************************************************************
*  Verifica a existencia de um valor em um array												*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 20/11/2001 - 12:07																*
************************************************************************************************/
function inArray(theArray, theValue) {
	for (var i=0; i<theArray.length; i++) {
		if ( theArray[i].toString().toLowerCase() == theValue.toString().toLowerCase() )
			return true;
	}
	return false;
}

function setDate(fld, autoComplete) {
	var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
	str = fld.value.replace(/\D/g,'');
	if (str) {
		if ( !inArray(ignoreKeys, window.event.keyCode) ) {
			var s1 = str.substr(0,2);
			var s2 = str.substr(2,2);
			var s3 = str.substr(4,4);
			str = s1 +(s1.length==2 ? '/' : '') + s2 + (s2.length==2 ? '/' : '') + s3;
			fld.value = str;
			if ( autoComplete ) {
				setDateComplete(fld);
				str = fld.value;
			}
			/*if ( str.match(/^\d{2}\/\d{2}\/\d{4}$/) ) {
				focusNext(fld);
			}*/
		}
	}
}

function setTime(fld) {

	var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
	if (!fld) fld = window.event.srcElement;
	var frm = fld.form;
	var str = fld.value.replace(/[^\d]/g,'');

	if (str) {
		if ( !inArray(ignoreKeys, window.event.keyCode) ) {
			if (str.length == 2)
				str += ':';
			else if (str.length > 2)
				str = str.substr(0,2) +':'+ str.substr(2,2);
			fld.value = str;
		}
	} else fld.value = '';
}


/************************************************************************************************
*  Validação de CEO																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCEP(campo, alias){

	var str;
	var msg;
	erro = false;
	str = campo.value;

	if (str) {
		re = /^[0-9]{8}$/ig;
		if ( !str.match(re) ) {

			erro = true;
			msg = "O campo '"+ alias +"' não contém um CEP válido!";
			errorMsg(campo, msg);

		}
	}
	return !erro;
}





/************************************************************************************************
*  Validação de CGC																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCNPJ(cnpj) {
	return isCGC(cnpj);
}



function isCGC(cgc) {

	var calcCGC;
	var s1;
	var s2;
	var i;
	var soma;
	var digito;
	var result;

	s1 = cgc;
	result = false;

	if (s1.length != 14) {
		alert('O CNPJ deve possui 14 dígitos!');
		return result;
	}
	if (s1 == '00000000000000') {
		alert('CNPJ inválido!');
		return result;
	}	
	calcCGC = s1.substring(0, 12);

	//  Cálculo do 1º dígito 
	soma = 0;
	for (i = 1; i <= 4; i++) {
		soma = soma + (calcCGC.charAt(i-1) * (6 - i));
	}
	for (i = 1; i <= 8; i++) {
		soma = soma + (calcCGC.charAt(i + 3) * (10 - i));
	}
	digito = 11 - (soma % 11);

	if ((digito == 10) || (digito == 11))
		calcCGC = calcCGC + '0';
	else
		calcCGC = calcCGC + digito;

	// Cálculo do 2º dígito 
	soma = 0;
	for (i = 1; i <= 5; i++) {
		soma = soma + (calcCGC.charAt(i-1) * (7 - i));
	}
	for (i = 1; i <= 8; i++) {
		soma = soma + (calcCGC.charAt(i + 4) * (10 - i));
	}
	digito = 11 - (soma % 11);

	if ((digito == 10) || (digito == 11))
		calcCGC = calcCGC + '0';
	else
		calcCGC = calcCGC + digito;

	if (calcCGC == s1) result = true;
	
	if (!result) alert('CNPJ Inválido!');

	return result;
}






/************************************************************************************************
*  Validação de CPF																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCPF(cpf) {

	var i;
	var soma;
	var digito;
	var calcCPF;
	var s1;
	var s2;
	var b;
	var c;
	var result;
	var alerted;

	erro = alerted = false;

	s1 = cpf;
	if (s1.length != 11) {
		alert('O CPF deve possuir 11 dígitos');
		erro = true;
		alerted = true;
		return;
	}
	// Teste se os 11 díg. são iguais 
	b = true;
	c = s1.charAt(0);
	for (i = 1; i < 11; i++) { 
		if ((b) && (s1.charAt(i) == c))
			b = true;
		else
			b = false;
		c = s1.charAt(i);
	}
	
	if (b) {
		erro = true;
	}

	calcCPF = s1.substring(0, 9);
	// Cálculo do 1º dígito
	soma = 0;
	for (i = 1; i <= 9; i++) {
		soma = soma + (calcCPF.charAt(i-1) * (11 - i));
	}
	digito = 11 - (soma % 11);

	if ((digito== 10) || (digito == 11))
		calcCPF = calcCPF + '0';
	else
		calcCPF = calcCPF + digito;

	// Cálculo do 2º dígito
	soma = 0;
	for (i = 0; i <= 10; i++) {
		soma = soma + (calcCPF.charAt(i-1) * (12 - i));
	}
	digito = 11 - (soma % 11);

	if ((digito== 10) || (digito == 11))
		calcCPF = calcCPF + '0';
	else
		calcCPF = calcCPF + digito;

	if (calcCPF == s1)
		result = true;
	else 
		result = false;

	if (!erro)
		erro = !result;
	
	if (erro && !alerted)
		alert('O CPF digitado é inválido!');

	return(!erro);

}





/************************************************************************************************
*  Validação de data																			*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isDate( campo , alias) {

	var msg;
	var str = campo.value;
	erro = true;
	arrMonths = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/ig;

	if ( str.match(re) ) {

		aDate = str.split('/');
		day = aDate[0]*1;
		month = aDate[1]*1;
		year = aDate[2]*1;

		if (isLeap(year)) arrMonths[2] = 29;

		if ( (day > 0) && (day <= arrMonths[month]) && (month > 0) && ( month < 13) )
			erro = false;

	} else if ( !str )
		erro = false;


	if (erro) {
		msg = 'O campo '+ alias +' deve conter uma data no formato DD/MM/AAAA';
		errorMsg(campo, msg);
	}
	return !erro;
}






/************************************************************************************************
*  Verifica se eh ano bissexto (usada na funcao isDate)											*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isLeap(y) {
	var N = parseInt(y);
	return ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ));
}





/************************************************************************************************
*  Validação de e-mail																			*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isEmail(campo, alias) {

	var c;
	var msg;
	erro = false;
	strMail = campo.value.replace(/ /g,"");

	if (strMail) {

		//Verifica a existência de "@" e se existe alguma string antes
		if(strMail.search("@")>=1) {

			//Verifica se existe algum caracter inválido
			strMail = strMail.replace("@",".");
			arrMail = strMail.split(".");
			if(arrMail.length<3) erro = true;

			for(c=0; c<arrMail.length; c++) {
				if(erro) 
					break;
				else
					erro = hasWeirdChars(arrMail[c]);
				if (arrMail[c].length==0)
					erro=true;
			}
		}
		else
			erro = true;
	}

	if (erro) {
		msg = "O campo '"+ alias +"' não contém um e-mail válido!";
		errorMsg(campo, msg);
	}
	return !erro;
}






/************************************************************************************************
*  Verifica existencia de caracteres inválidos em um e-mail(usada em isEmail)					*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function hasWeirdChars(str) {

	var A_Z = "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
	var others = A_Z + "-_";
	var i;
	var last = str.length-1;

	for (i=0;i<str.length;i++) {
		chrNow = str.charAt(i);
		if ( (i==0) || (i==last) ) {

			if ( (A_Z.indexOf(chrNow)==-1) )
				return true;

		} else {

			if (others.indexOf(chrNow)==-1)
				return true;
		}
	}
	return false;
}





/************************************************************************************************
*  Validação de campos obrigatórios																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isNull(campo, alias){

	erro = false;
	var auxText = trim(campo.value)
	var msg;

	if (auxText.length == 0) {

		erro = true;
		msg = "O campo '"+ alias +"' deve ser preenchido obrigatoriamente!";
		campo.value = auxText;
		errorMsg(campo, msg);

	}
	return !erro;
}



/************************************************************************************************
*  Trim																							*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function trim (str) {
	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}




/************************************************************************************************
*  validação de campos numéricos																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isNumeric(campo, alias) {

	erro = false;
	var msg;
	var n = campo.value.replace(',','.');

	if ( isNaN(n) ) {
		erro = true;
		msg = "O campo '"+ alias +"' deve conter um valor numérico!";
		errorMsg(campo, msg);
	}
	return !erro;
}




/************************************************************************************************
*  validação de campos numéricos positivos														*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 14/01/2003 - 16:41																*
************************************************************************************************/
function isNatural(campo, alias) {

	erro = false;
	var msg;

	var n = campo.value.replace(',','.')*1;
	if ( !(n > 0) && campo.value) {
		erro = true;
		msg = "O campo '"+ alias +"' deve conter um valor positivo!";
		errorMsg(campo, msg);
	}
	return !erro;

}



/************************************************************************************************
*  Validação de campos de hora																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isTime(campo, alias){
	
	erro = true;
	var msg;
	var hour = campo.value;

	if(hour.indexOf(":")) {
		arrParts = hour.split(":")
		if(arrParts.length == 2){
			hora = (arrParts[0]*1);
			mins = (arrParts[1]*1);
			if(!(isNaN(hora)) && !(isNaN(mins))){
				if((hora<24)&&(hora>=0)) {
					if( (mins<60) && (mins>=0) ){
						erro = false;
						if(hora < 10)hora = '0'+ hora;
						if(mins < 10)campo.value = hora +':0'+ mins;
					}
				}
			}
		}
	}

	if (erro) {
		msg = "O campo '"+ alias +"' deve conter um horário válido!";
		errorMsg(campo, msg);
	}
}




/************************************************************************************************
*  Validação de radios e checkboxes																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function xNull(campo, label) {

	erro = true;
	if (campo.length) {
		for (var i=0; i<campo.length; i++) {
			if (campo[i].checked) {
				erro = false;
				break;
			}
		}
	} else if (campo.checked) {
		erro = false;
	}

	if (erro && label)
		alert("Você deve selecionar pelo menos uma opção no campo '"+ label +"'.");

	return !erro;
}




/************************************************************************************************
*  Tamanho mínimo de um campo																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function Len(campo, alias) {

	erro = false;
	var msg;

	if (campo.value.length < campo.requiredLen) {

		erro = true;
		msg = "O campo '"+ alias +"' deve conter, no mínimo, "+ campo.requiredLen +" caracteres!";
		errorMsg(campo, msg);

	}
	return !erro;
}



/************************************************************************************************
*  Exibe mensagem de erro																		*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 11/12/2002 - 14:40																*
************************************************************************************************/
function errorMsg(oFld, strMsg) {
	alert(strMsg);
	setFocus(oFld);
}



/************************************************************************************************
*  Seta o foco no campo onde ocorreu o erro														*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 11/12/2002 - 14:40																*
************************************************************************************************/
function setFocus(oFld) {
	try {
		var strType = oFld.type.toLowerCase();
		if (strType == 'text' )
			oFld.select();
		if ( strType != 'hidden')
			oFld.focus();

	} catch (err) {
		return false;
	}
}

//-->