/* ********************************************************************************************** */

/* VALIDA OS CAMPOS DE UM FORMULÁRIO */
function ValidaCampos(objForm){

	// para validar data
	var strData;
	
	if (document.getElementById('txtMes') != null )
	{
		var strMes = objForm.txtMes.value;
		var strDia = objForm.txtDia.value;
		var strAno = objForm.txtAno.value;
		var arrData = objForm.hdnData.value.split('/');

		if(strMes != '' && strMes > 12)
		{
			alert('Invalid month!');
			objForm.txtMes.focus();
			return false;
		}
		if(strDia != '' && strDia > 31)
		{
			alert('Invalid day!');
			objForm.txtDia.focus();
			return false;
		}
		if(objForm.txtAno.value != '' && objForm.txtAno.value.length != 4)
		{
			alert('Invalid year!');
			objForm.txtAno.focus();
			return false;
		}

		if(strMes.length < 2) strMes = '0' + strMes;
		if(strDia.length < 2) strDia = '0' + strDia;

		strData = strDia + '/' + strMes + '/' + strAno;

		if(!(objForm.txtMes.value == '' && objForm.txtDia.value == '' && objForm.txtAno.value == ''))
		{
			if(!isDate(strData) || (parseInt(strAno.substr(0,2)) < 19 && parseInt(strAno.substr(0,2)) > 20))
			{
				alert('Please, insert a valid date!');
				objForm.txtMes.focus();
				return false;
			}
			else if(parseInt(strAno) > arrData[2])
			{
				alert('Please, insert a valid date!');
				objForm.txtMes.focus();
				return false;
			}
			else if(parseInt(strMes) > arrData[1] && parseInt(strAno) >= arrData[2])
			{
				alert('Please, insert a valid date!');
				objForm.txtMes.focus();
				return false;
			}
			else if(parseInt(strDia) > arrData[0] && (parseInt(strMes) >= arrData[1] && parseInt(strAno) >= arrData[2]))
			{
				alert('Please, insert a valid date!');
				objForm.txtMes.focus();
				return false;
			}
		}
	}	
	// FIM: para validar data

	// tipos de campos:
		// n		- numérico
		// n2		- numérico  (números e "-" - geralmente para número de telefone)
		// t		- texto		(alfanumérico)
		// t2		- texto		(somente letras)
		// c		- cep		(valida o campo com 8 dígitos - sem o "-")
		// c2		- cep		(somente números e traços - até 9 dígitos)
		// e		- e-mail	(valida o campo com uma "@" e pelo menos um ".")
		// d		- ddd		(valida se o campo tem somente 2 digítos e se é numérico)
		// ch		- check		(verifica se o campo é um checkbox)
	// ao criar o formulário, adicionar os seguintes itens aos controles:
		// nome		- nome do campo que aparece nas mensagens (quando o campo for vazio (se obrigatório) ou de tipo inválido)
		// tipo		- tipo do campo, se é texto, numérico, e-mail, cep, ddd...
		// obg		- se o campo é obrigatório (usar "s" se for obrigatório e vazio se não for obrigatório)
	// OBS.: Pode-se adicionar outros tipos, conforme a necessidade

	// caso haja necessidade de mostrar as mensagens dos "alerts" em inglês, utilizar as frases abaixo:
		// O campo "NOME DO CAMPO" é obrigatório!							-> The field "FIELD NAME" is obligator!
		// O campo "NOME DO CAMPO" deve conter somente números!				-> The field "FIELD NAME" must only contain numbers!
		// O campo "NOME DO CAMPO" deve conter somente números e um traço!	-> The field "FIELD NAME" must only contain numbers and a trace!
		// O campo "NOME DO CAMPO" deve conter somente letras!				-> The field "FIELD NAME" must only contain letters!
		// O campo "NOME DO CAMPO" deve conter "NÚMERO" dígitos!			-> The field "FIELD NAME" must contain "NUMBER" digits!
		// E-mail inválido!													-> Invalid e-mail!

	for(var i = 0;i < objForm.length;i++){

		// verifica se o campo é obrigatório e se está vazio
		if(objForm.elements[i].value == '' && objForm.elements[i].obg == 's'){
			//alert('The field "'+ objForm.elements[i].nome +'" is obligator!');
			alert('You must fill in all the fields marked with a *!');
			objForm.elements[i].focus();
			return false;
		}

		// verifica se o campo é do tipo numérico
		if(objForm.elements[i].tipo == 'n' && objForm.elements[i].value != ''){
			if(isNaN(objForm.elements[i].value)){
				alert('The field "'+ objForm.elements[i].nome +'" must only contain numbers!');
				objForm.elements[i].select();
				return false;
			}
		}

		// verifica se o campo é do tipo numérico (números e "-" - geralmente para número de telefone)
		if(objForm.elements[i].tipo == 'n2' && objForm.elements[i].value != ''){
			var strValidos = '1234567890-';
			var strTelefone = objForm.elements[i].value;
			var blnExisteCaracter = false;
			var blnValido = false;

			strTelefone = strTelefone.replace(' ','');

			for(var j = 0;j < strTelefone.length;j++){
				for(var k = 0;k < strValidos.length;k++){
					if(strTelefone.substr(j,1) == strValidos.substr(k,1)){
						blnExisteCaracter = true;
						break;
					}
				}

				if(blnExisteCaracter) blnValido = true;
				else blnValido = false;

				blnExisteCaracter = false;
			}

			if(!blnValido){
				alert('The field "'+ objForm.elements[i].nome +'" must only contain numbers and a trace!');
				objForm.elements[i].select();
				return false;
			}
		}

		// verifica se o campo é somente texto (somente letras)
		if(objForm.elements[i].tipo == 't2' && objForm.elements[i].value != ''){
			for(var j = 0;j < objForm.elements[i].value.length;j++){
				var strInvalidosNumeros = '1234567890"!#$%¨&*()+=ªº{}[]`´^~;:<>?/|\\\'';

				for(var k = 0;k < strInvalidosNumeros.length;k++){
					if(objForm.elements[i].value.substr(j,1) == strInvalidosNumeros.substr(k,1)){
						alert('The field "'+ objForm.elements[i].nome +'" must only contain letters!');
						objForm.elements[i].select();
						return false;
					}
				}
			}
		}

		// verifica se o campo de cep é válido (8 dígitos - sem o "-")
		if(objForm.elements[i].tipo == 'c' && objForm.elements[i].value != ''){
			if(isNaN(objForm.elements[i].value)){
				alert('The field "'+ objForm.elements[i].nome +'" must only contain numbers!');
				objForm.elements[i].select();
				return false;
			}

			if(objForm.elements[i].value.length != 8){
				alert('The field "'+ objForm.elements[i].nome +'" must contain 8 digits!');
				objForm.elements[i].select();
				return false;
			}
		}

		// verifica se o campo de cep é válido (somente números e traços - até 9 dígitos)
		if(objForm.elements[i].tipo == 'c2' && objForm.elements[i].value != ''){
			if(isNaN(objForm.elements[i].value)){
				var blnTraco = false;

				for(var j = 0;j < objForm.elements[i].value.length;j++){
					if(objForm.elements[i].value.substr(j,1) == '-' && !blnTraco){
						blnTraco = true;
					}else
					{
						blnTraco = false;
					}
				}
				
				if(!blnTraco){
					alert('The field "'+ objForm.elements[i].nome +'" must only contain numbers and a trace!');
					objForm.elements[i].select();
					return false;
				}
			}

			//if(objForm.elements[i].value.length != 9){
			//	alert('O campo "'+ objForm.elements[i].nome +'" deve conter 9 dígitos!');
			//	objForm.elements[i].select();
			//	return false;
			//}
		}

		// verifica se o campo de ddd é válido
		if(objForm.elements[i].tipo == 'd' && objForm.elements[i].value != ''){
			if(isNaN(objForm.elements[i].value)){
				alert('The field "'+ objForm.elements[i].nome +'" must only contain numbers!');
				objForm.elements[i].select();
				return false;
			}

			if(objForm.elements[i].value.length != 2){
				alert('The field "'+ objForm.elements[i].nome +'" must contain 2 digits!');
				objForm.elements[i].select();
				return false;
			}
		}

		//
		if(objForm.elements[i].tipo == 'ch' && !objForm.elements[i].checked){
			document.getElementById('divMsngOk_2').style.display = 'inline';
			return false;
		}

		// verifica se o campo é um e-mail e valida o e-mail
		if(objForm.elements[i].tipo == 'e' && objForm.elements[i].value != ''){
			var strEmail = objForm.elements[i].value;
			var strInvalidos = '"!#$%¨&*()+=ªº{}[]`´^~ç;:<>?/|\\\'';
			var blnArroba = false;
			var blnPonto = false;

			for(var i2 = 0;i2 < strEmail.length;i2++){
				for(var i3 = 0;i3 < strInvalidos.length;i3++){
					if(strEmail.substr(i2,1) == strInvalidos.substr(i3,1)){
						alert('Invalid e-mail!');
						objForm.elements[i].select();
						return false;
					}
				}

				if(i2 > 0 && strEmail.substr(i2,1) == '@'){
					if(blnArroba){
						blnArroba = false;
					}else{
						blnArroba = true;
					}

					if(i2 == (strEmail.length - 1) && strEmail.substr(i2,1) == '@'){
						blnArroba = false;
					}
				}

				if(blnArroba && strEmail.substr(i2,1) == '.'){
					blnPonto = true;
				}
			}

			if(!blnArroba || !blnPonto){
				alert('Invalid e-mail!');
				objForm.elements[i].select();
				return false;
			}
		}
	}

	// RECUPERA O NOME DA PÁGINA ATUAL PARA DAR UM SUBMIT PARA ELA MESMA
	var strURL = document.location.toString();
	var intTamanho = strURL.length;
	var intPosicao;
	var strAction;

	for(var i=intTamanho - 1;i >= 0;i--){
		if(strURL.substr(i, 1) == '/'){
			intPosicao = i;
			break;
		}
	}

	strAction = strURL.substr(intPosicao + 1, intTamanho - intPosicao);
	// FIM: RECUPERA O NOME DA PÁGINA ATUAL PARA DAR UM SUBMIT PARA ELA MESMA

	//objForm.action = strAction+'?submit=ok';
	objForm.action = strAction;
	objForm.submit();
}

/* LIMPA O FORMULÁRIO, DEIXANDO OS CAMPOS COM O VALOR INICIAL */
function Limpar(objForm){
	objForm.reset();

	try{
		document.getElementById('divMsngOk_2').style.display = 'none';
	}
	catch(e){}
}

/* LIMITA O NÚMERO DE CARACTERES EM UM CAMPO */
function ContaCaracteres(objCampo, intCaracteres){
	if(objCampo.value.length > intCaracteres){
		objCampo.value = objCampo.value.substr(0, intCaracteres);
	}
}

/* QUANDO O CAMPO ATINGE SEU LIMITE DE CARACTERES, PULA PARA O CAMPO SEGUINTE */
function PulaProximoCampo(objForm,objCampo){
	if(objCampo.value.length == objCampo.maxLength){
		for(var i = 0;i < objForm.length;i++){
			if(objForm.elements[i].name == objCampo.name){
				if((i + 1) < objForm.length){
					objForm.elements[i + 1].focus();
					break;
				}
			}
		}
	}
}

/* ********************************************************************************************** */
function isDate(data)
{
    var reDat = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/ ;
    if (! reDat.test(data)) 
    {
        return false;
	}
	return true;
}
function soNum(e) 
{
    var tecla = getKey(e);

    if ((tecla > 47 && tecla < 58) || (tecla == 8) || (tecla == 9)) // numeros de 0 a 9, tab, end, home, del, bkspc
    {
        return true;
    }
    else
    {       
        return false;        
    }    
}
function getKey (event) 
{
    return event?(event.keyCode?event.keyCode:(event.which?event.which:event.charCode)):null;
}