// diversos utilitários para consistência de entrada de dados

// função que valida data
// recebe como parâmatros os campos do formulário, não seus conteúdos
// retorna true ou false se a data é válida
function valData(objDia, objMes, objAno) {

	var mesdia = new initArray(12);

	mesdia[0] = "0131";
	mesdia[1] = "0228";
	mesdia[2] = "0331";
	mesdia[3] = "0430";
	mesdia[4] = "0531";
	mesdia[5] = "0630";
	mesdia[6] = "0731";
	mesdia[7] = "0831";
	mesdia[8] = "0930";
	mesdia[9] = "1031";
	mesdia[10] = "1130";
	mesdia[11] = "1231";
	
	var intDia = objDia.value
	var intMes = objMes.value
	var intAno = objAno.value
	
	if ((intDia < 10) && (intDia !=0))intDia = "0" + intDia
	if ((intMes < 10) && (intMes !=0))intMes = "0" + intMes
	
	if ( (isNaN(intAno)) || (intAno<1900) || (intMes=="00") || (intDia=="00") ) {

		return false;
	}
   
	mesdia[1] = "0228";

	if ( (intAno%4)== 0)   {

		mesdia[1] = "0229";

	}


	if ( (intMes+intDia) > mesdia[intMes-1] )  {

		return false;
	}

	return true;

}


//valida email
function isEmail(who) {
	var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
	return (email.test(who))
}

// esta função percorre todos os elementos do form
// recebe como parâmetro o próprio form 
function valFormLoop(theForm) {

	var nome="";
	var sCampo="";
	var strCampo = "";
	var valisenha = 0;
	// faz um loop por todos os elementos do form
	// sai do loop ao encontrar um erro
	for (var ni = 0 ; ni<theForm.elements.length; ni++) {     
	if(theForm.elements[ni].type!="hidden" && theForm.elements[ni].disabled==false){
		// extrai a primeira letra do nome do elemento
		nome = theForm.elements[ni].name.substring(0,1);
		
		// elemento é um string e não pode estar vazio
		if ( (nome=="x") && (TirarBrancoFinal(theForm.elements[ni].value) == "") )  {
			if (theForm.elements[ni].title){strCampo = theForm.elements[ni].title}
			else{strCampo = theForm.elements[ni].name.substring(1)}
			
			//mensErro = "o campo " + theForm.elements[ni].name.substring(1) + " é obrigatório!";
			mensErro = "O campo " + strCampo + " é obrigatório!";

			qual = ni; // sinaliza qual o elemento que está com erro 

			return false;
		}


		// elemento é número: deve conter somente dígitos e não pode estar vazio
		if (nome=="y")  {

			// retirar caracteres especiais
			sCampo = EliminarCaracter(theForm.elements[ni].value,".");
			sCampo = EliminarCaracter(sCampo,"-");
			sCampo = EliminarCaracter(sCampo,"/");	

			// se não for número ou estiver vazio, ocorre erro
			if ( (isNaN(sCampo)) || (TirarBrancoFinal(sCampo) == "") ) {
				
				if (theForm.elements[ni].title){strCampo = theForm.elements[ni].title}
				else{strCampo = theForm.elements[ni].name.substring(1)}
				
				mensErro = "O campo " + strCampo + " é obrigatório e deve ser preenchido com números!";

				qual = ni;

				return false;  
			}else {
			
			theForm.elements[ni].value = sCampo;
			}
			

		}

		// elemento é número: se não estiver vazio, deve conter somente dígitos
		if (nome=="u")  {

			// retirar caracteres especiais
			sCampo = EliminarCaracter(theForm.elements[ni].value,".");
			sCampo = EliminarCaracter(sCampo,"-");
			sCampo = EliminarCaracter(sCampo,"/");	

			// se não for número, ocorre erro
			if ( isNaN(sCampo) ) {
				
				if (theForm.elements[ni].title){strCampo = theForm.elements[ni].title}
				else{strCampo = theForm.elements[ni].name.substring(1)}
				
				mensErro = "O campo " + strCampo + " deve ser preenchido com números!";

				qual = ni;

				return false;  
			}

		}



		// elemento tipo select 
		// se há opção vazia (00) indica que o usuário não fez seleção
		if ( (nome=="z") && (theForm.elements[ni].value=="00") )  {
			
			if (theForm.elements[ni].title){strCampo = theForm.elements[ni].title}
			else{strCampo = theForm.elements[ni].name.substring(1)}
			
			mensErro = "Selecione uma opção para " + strCampo ;

			qual = ni;

			return false;
		}

		
		// elemento contém e-mail e é campo obrigatório
		// apesar de não ser possível detectar se usuário está digitando 
		// e-mail válido, a função verifica se existem
		// os caracteres '@' e '.'
		//if ( (nome=="w") && ( (TirarBrancoFinal(theForm.elements[ni].value) == "") || (theForm.elements[ni].value.indexOf("@") == -1) || (theForm.elements[ni].value.indexOf(".") == -1) ) )  {  
		if ( (nome=="w") && isEmail(theForm.elements[ni].value) !=true)  {  
			
			if (theForm.elements[ni].title){strCampo = theForm.elements[ni].title}
			else{strCampo = theForm.elements[ni].name.substring(1)}
			
			mensErro = "O campo " + strCampo + " é inválido!";

			qual = ni;

			return false;  


		}


	}
	}
	return true;


}




// Tira Brancos no fim da string
function TirarBrancoFinal(sValor) {  

	var wI = sValor.length - 1; // obtém o tamanho do string 

	for (; wI > -1; wI--)   {  // faz um loop de tráz para frente

		if (sValor.substring(wI, wI + 1) != " ")  { // se tiver algum
							    // caracter, está ok 

			return sValor.substring(0,wI + 1);
		}
	}

	return "";
}


// cria objeto array, inicializando com ""
function initArray(arrayLength) {

	this.length = arrayLength;

	for (var i = 0; i < this.length; i++) {

		this[i] = "";

	}

}


// verifica se string contém o caracter especificado e o retira de dentro da string
function EliminarCaracter(sString,sCarac) {

	var sResult = "";

	for (var i=0; i<sString.length; i++)  {

		if (sString.substring(i, i+1) != sCarac) {

			sResult += sString.substring(i,i + 1);

		}

	}

	return sResult;
}






