<!--//
var erro;		//variável global q guarda o status do erro

/************************************************************************************************
*  Faz o parse da string de validação e chama getParams(										*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
*  Parâmetros: 'nome_do_form','nome_do_campo|tipo_de_validacao|"label"_para_campo'.				*
*  Para validar mais de um campo, passa-los separados por virgulas.								*
************************************************************************************************/
function validaForm(nomeform, vetor){
	var i, campos, params;
	erro = false;
	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 ) {
		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) {

	params = campos.split("|");
	tipoValidacao = params[1].toLowerCase();
	frm = document.forms[nomeForm];
	field = frm.elements[params[0]];
	label = params[2];

	if ( !field.disabled ) {

		switch (tipoValidacao) {

			case 'isnull':
				//Valida se o campo está em branco
				isNull(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 = frm.elements[params[2]];
				compareFields(field, field2);
				break;

			case 'isnumeric':
				//Valida se o campo contém um valor numérico
				isNumeric(field, label);
				break;

			case 'isinteger':
			case 'isint':
				//Valida se o campo contem um numero inteiro
				isInteger(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 'iscgc':
			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);
		}
	}
}





/************************************************************************************************
*  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;
}





/************************************************************************************************
*  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;
	re = /^[0-9]{5}\-[0-9]{3}$/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!');

}





/************************************************************************************************
*  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 inteiros																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 18/12/2001 - 11:13																*
************************************************************************************************/
function isInteger(campo, alias) {

	erro = false;
	var msg;
	var n = campo.value;
	var re = /^\d*$/;

	if ( !n.match(re) ) {
		erro = true;
		msg = "O campo '"+ alias +"' deve conter um número inteiro!";
		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);
	}
}



/************************************************************************************************
*  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) {

	var strType = oFld.type.toLowerCase();
	if (strType == 'text' )
		oFld.select();
	if ( strType != 'hidden')
		oFld.focus();
}

/************************************************************************************************
*  auto-complete para campos de telefone											            *
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 19/05/2003																		*
************************************************************************************************/
function setFone() {
 
 var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
 var 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 == 4)
    str += '.';
   else if (str.length > 4)
    str = str.substr(0,4) +'.'+ str.substr(4);
   fld.value = str;
  }
 }
}

/************************************************************************************************
*  Quando o campo DDD é preenchido vai diretamente para o campo Fone				            *
*  Autor: Eduardo Franciosi																		*
*  Data/Hora: 19/05/2003																		*
************************************************************************************************/
function setDDD(str,field) {

  var str = str;
  var field = field;	

  if (str.length == 2)
	  field.focus();

}

//-->