function fTrim(str){
	/************************************************************************************
		FTRIM (STR)
		Função genérica utilizando expressões regulares para retornar campo
		sem espaços.
	************************************************************************************/
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

function checkFields(form, fields){
	/*************************************************************************************
		CHECKFIELDS (FORM, FIELDS)
		Função Genérica que verifica se os campos estão vazios,
		ele recebe o form da página como primeiro argumento
		e os nomes dos campos e seus respectivos rótulo.		
		ex.: checkFields(this, [["nome","Nome"],["end","Endereço"]]);
		Premissa: Função inArray().
	**************************************************************************************/
	// Cria as variáveis que serão utilizadas na função
	var obj;
	var cont1;
	var cont2;
	var checked;
	var types;
	var typesPass; 
		
	
	// Inicia as variáveis com seus valores		
	cont1     = fields.length;
	types     = ["text", "textarea", "password", "select-one", "select-multiple", "file"];
	typesPass = ["submit", "button", "reset", "hidden"];

	// Inicia a verificação
	for(var i = 0; i < cont1; i++) {
		obj = eval("form." + fields[i][0]);
		
		if(inArray(types, obj.type) == false && inArray(typesPass, obj.type) == false) { 
			cont2 = obj.length;
			checked = false;
			for(var j = 0; j < cont2; j++ )
				if (obj[j].checked == true) { checked = true; }
			if(checked == false) {
				alert("Por favor preencha o campo " + fields[i][1] + " corretamente!" );
				obj[0].focus();
				return false;
			}
		} else {
			if(inArray(types, obj.type)){
				if(fTrim(obj.value) == ""){
					alert("Por favor preencha o campo " + fields[i][1] + " corretamente!" );
					obj.focus();
					return false;
				}
			}
		}
	}
	return true;		  
}

function inArray(list, type) {
	/*************************************************************************************
		INARRAY (LIST, TYPE)
		Função que retorna true (verdadeiro) se o o valor que chega pelo parâmetro TYPE 
		estiver dentro do array do parâmetro LIST e false (falso) caso não esteja.
		ex.: inArray(["text", "textarea"], "text");
	**************************************************************************************/	
	// Cria as variáveis que serão utilizadas na função
	var cont;
	var result;
	
	// Inicia as variáveis com os seus valores
	cont   = list.length;
	result = false;
	
	// Inicia a verificação
	for(var i = 0; i < cont; i++) 
		if(list[i] == type) 
			result = true;
	
	return result;					
}



function checkEmail( form, Field ){			
	/****************************************************************************************
		CHECKEMAIL (FORM, FIELD)
		Função Genérica para validar se o campo está vazio e se	está em formato de e-mail 
			usuario@dominio.com ou usuario@dominio.com.br
		Recebe o form da página como primeiro argumento	e o nome do campo e seu respectivo 
		rótulo.

		ex.: checkEmail(this, ["fldEmail","E-Mail"]);
	****************************************************************************************/

	var obj = eval( "form." + Field[0]);
//	var ErEmail = /^[A-Za-z0-9_.\-]+@([A-Za-z0-9_]+\-\.)+[A-Za-z]{2,4}$/g;
	var ErEmail = /^[A-Za-z0-9_.]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4}$/g;


	if( ! obj.value.match(ErEmail) ){
		alert("Por favor preencha o campo " + Field[0,1] + " corretamente.");
		obj.focus();
		return false;
	}// if
	return true;
}// checkEmail



function checkDate( Input ){
	var Data = Input.value;
	
	/*Expressão Regular comentada para modelo mais específico /^([0-9]{2})[\/]([0-9]{2})[\/]([0-9]{4})$/; */
	var DataRegEx = /^([012][0-9]|3[01])\/(0[1-9]|1[012])\/([0-9]{4})$/;

	if(!(Matches = Data.match(DataRegEx))){
		alert("Formato de data inválido.\nPor favor preencha o campo novamente!");
		Input.focus();
		return false;
	}
	
	// quebra a data em DIA, MES e ANO
	var Dia = Matches[1], Mes = Matches[2], Ano = Matches[3];

	if(Dia<1 || Dia>31){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	if(Mes<1 || Mes>12){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	if ((Mes==4 || Mes==6 || Mes==9 || Mes==11) && Dia>30){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	
	if (Mes==2) {
		var Resto = (Ano % 4); 
	
		if (Resto==0 && Dia>29){ alert("Em anos bissextos, o mês de fevereiro só tem 29 dias.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
		if (Resto != 0 && Dia>28){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	
	}
	
	return true;
}// fim checkDate

function checkPeriodo( objFrm, dataInicio, dataTermino ){
/*********************************************************************************
VALIDARPERIODO( FORM, DATA1, DATA2 );
	Função genérica para validação de período entre datas.
	Tem como objetivo verificar se a data de término é menor que
	a data de inicio do período.

Exemplo de como chamar a função:
	<input type="button" name="botao" value="! validar !" onClick="checkPeriodo( frm, 'fldDataIni', 'fldDataFim' );">

Nota: Veja que os campos aonde estão as datas são passados como string comum.
***********************************************************************************/
	var dtIni, dtFim;
	var ctlDt1, ctlDt2;
	// obter o value do campo
	var dtInicio	= eval( "objFrm." + dataInicio );
	var dtTermino	= eval( "objFrm." + dataTermino );

	// retirar a barra de separação para transformar
	// em um numero inteiro
	// ex.:  27/01/1982 - 27011982
	ctlDt1	= dtInicio.value.split("/");
	ctlDt2	= dtTermino.value.split("/");

	// para validar o período deve-se iniciar do Ano para o Dia
	dtIni	= ctlDt1[2] + ctlDt1[1] + ctlDt1[0];
	dtFim	= ctlDt2[2] + ctlDt2[1] + ctlDt2[0];

	if ( parseInt(dtIni) > parseInt(dtFim) ){
		alert( "Período inválido!\nA data final é menor que a data de inicio do período." );
		dtInicio.focus();
		return false;
	}
	return true;
}

