
/* Script de validacao de campos de um form v.2
	Verificar os campos de um formulario, procura nos elementos do form passado como parametro	
			  por uma tag: validarInfo com uma das seguintes configuracoes:
					""(não definida): O campo não e validado
					"Texto a mostrar": O texto será mostrado caso a validacao do tipo 0 (se campo vazio) falhar
					"tipoValidacao,Texto a mostrar": O texto será mostrado se o tipo de validacao especificado falhar
					
					Tipos de validacao podem ser acrescentados no codigo: 
						switch(tipoValidacao){
						...
							case N:
								break;
						}
					
					Estao definidos os seguintes tipos de validação:
						0 -Testar se o objecto está vazio	
						1 -Testar se o valor é numerico
						2 -Testar se o valor é um email válido
			 */
	//Array de mensagens descritivas do problema, indexadas pela linguagem (idLing- ver abaixo)			 
	var msgsDescProbVerificarCamposForm=new Array();
	
	//Array de mensagens descritivas do problema, indexadas pelo tipo de validacao para idLing='pt'
	msgsDescProbVerificarCamposForm['pt']=new Array(
		'Ocorreram os seguintes problemas:\n',
		new Array('está vazio', 'tem que conter um número', 'tem que conter um endereço de email válido'));
	//Array de mensagens descritivas do problema, indexadas pelo tipo de validacao para idLing='en'	
	msgsDescProbVerificarCamposForm['en']=new Array(
		'The following problems occured:\n',
		new Array('is empty', 'must contain a number', 'must contain a valid email address'));


	/**
	 * Verificar o campos de um form
	 * 
	 * @param object objForm  O objecto form a que pertencem os campos
	 * @param string idLing O identificador da linguagem a usar, se não estievr definido ou for vazio a liinguagem
	 * por defeito será idLing='pt'	
	 */				 
	function verificarCamposForm(objForm, idLing){
		
		//var msgsDescProb=new Array('está vazio', 'tem que conter um número', 'tem que conter um endereço de email válido');
		if((!idLing) || (idLing==''))
			idLing='pt';
		var msgAlerta=msgsDescProbVerificarCamposForm[idLing][0];		
		var msgsDescProb=msgsDescProbVerificarCamposForm[idLing][1];
	
		//As mensagens com textoValidacao e msgDescProb indexada ao tipo de validacao escolhido
		var msgAlertaProbs='';
		/*
		Talvez no futuro haja necessidade de passar o form por id
		//Se for string assume ser o id de um objecto
		var objForm;
		if (objFormT.split)
			objForm=document.getElementById(objFormT);
		else	
			objForm=objFormT;
		*/	
		for (i = 0; i < objForm.length; i++){
			var objFormElem=objForm.elements[i];
			var objFormElemAttribs=objFormElem.attributes['validarInfo'];
			if(objFormElemAttribs){
				//O atributo validarInfo está definido
				var valores=objFormElemAttribs.value.split(',');
				switch(valores.length){
					case 0:
						//O valor de validarInfo está definido mas vazio
						alert('Objecto: '+objForm.elements[i].name+' com validarInfo definida, mas vazia');
						return false;
						break;
					case 1:
						//O valor de validarInfo apenas contem o texto, neste caso irá usar-se o tipo de validacao 0
						var tipoValidacao=0;
						var textoValidacao=valores[0];
						break;
					case 2:
						//O valor de validarInfo contem o tipo de validacao e o texto
						var tipoValidacao=valores[0];
						var textoValidacao=valores[1];
						break;	
				}
				//Testar os elementos por tipo de validação
				var validacaoFalhou=false;
				//Testar o valor do objecto através do algoritmo definido atraves do tipo de validacao
				switch(parseInt(tipoValidacao)){
					case 0:
						//Verificar se está vazio
						if(objFormElem.value=='')
							validacaoFalhou=true;
							//msgAlertaProbs=msgAlertaProbs+textoValidacao+' está vazio \n';
						break;
					case 1:
						//Verificar se é valor numérico
						if(is_NaN(objFormElem.value))
							validacaoFalhou=true;
							//msgAlertaProbs=msgAlertaProbs+textoValidacao+' tem que conter um número \n';
						break;
					case 2:	
						//Verificar se é email válido
						emailRE = new RegExp("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$");
						if(!emailRE.test(objFormElem.value))
							validacaoFalhou=true;
							//msgAlertaProbs=msgAlertaProbs+textoValidacao+' tem que conter um email válido \n';
						break;	
				}
				//Se a validação falhou, acrescentar mais uma mensagem com o texto identificativo do objecto e descricao do erro
				if(validacaoFalhou)
					msgAlertaProbs=msgAlertaProbs+textoValidacao+' '+msgsDescProb[parseInt(tipoValidacao)]+'\n';
			}	
		}
		if(msgAlertaProbs!=''){
			alert(msgAlerta+msgAlertaProbs);
			return false;
		}
		return true;
	}
