
/* 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
						3 -Testar o valor 0 (considerado indefinido)
						4 -Testar chckbox ou radio
						5 -Testar objs com o mesmo nome, so colocar a tag validarInfo num dos objectos, preferencialmente o primeiro,
						pelo menos um dos objectos tem de ser validado
						6 -Igual a 5 so que em vez do nome verifica todos os objectos com a tag passada
			 */
	//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', 'está indefinido', 'tem de estar seleccionado', 
														 'pelo menos um dos elementos tem de estar preenchido',
														 'pelo menos um dos elementos tem de estar preenchido'));
	//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', 'is undefined', 'must be selected', 
														 'at least one of the packages must be selected',
														 'at least one of the packages must be selected'));


	/**
	 * 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='';
				//alert('0_5msg');
					//alert('1msg'+objForm.length);

	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;	
				case 3:
					//O valor de validarInfo contem o tipo de validacao e o texto e a valdacao secundaria pra o caso do tipo validacao 4
					var tipoValidacao=valores[0];
					var textoValidacao=valores[1];
					var tipoValidacao2=valores[2];
					break;		
				case 5:
					//O valor de validarInfo contem o tipo de validacao e o texto e a valdacao secundaria pra o caso do tipo validacao 4
					var tipoValidacao=valores[0];
					var textoValidacao=valores[1];
					var tipoValidacao2=valores[2];
					var tagAValidar=valores[3];
					var idContentorAValidar=valores[4];
					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 5:	
					validacaoFalhou=true;
					var objsMesmoNome=document.getElementsByName(objFormElem.name);
					for (i2 = 0; i2 < objsMesmoNome.length; i2++)
						if(!validacaoFalhouCamposFormValidarElemento(objsMesmoNome[i2], tipoValidacao2)){
							validacaoFalhou=false;	
							break;
						}
					break;	
				case 6:	
					validacaoFalhou=true;
					var objsMesmoNome=document.getElementById(idContentorAValidar).getElementsByTagName(tagAValidar);
					for (i2 = 0; i2 < objsMesmoNome.length; i2++)
						if(!validacaoFalhouCamposFormValidarElemento(objsMesmoNome[i2], tipoValidacao2)){
							validacaoFalhou=false;	
							break;
						}
					break;		
				default:
					validacaoFalhou=validacaoFalhouCamposFormValidarElemento(objFormElem, tipoValidacao);
			}
			//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;
}

function validacaoFalhouCamposFormValidarElemento(objFormElem, tipoValidacao){
	var	validacaoFalhou=false;
	switch(parseInt(tipoValidacao)){
		case 0:
			//Verificar se está vazio
			if(objFormElem.value=='')
				validacaoFalhou=true;
			break;
		case 1:
			//Verificar se é valor numérico
			if(!is_NaN(objFormElem.value))
				validacaoFalhou=true;
			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;
			break;	
		case 3:	
			if(objFormElem.value==0)
				validacaoFalhou=true;
			break;
		case 4:	
			if(objFormElem.checked==false)
				validacaoFalhou=true;
			break;	
	}
	//Se o objecto esta disabled, retuornar sempre validacao com sucesso, de forma a ignorar os elementos nesse estado
	return validacaoFalhou && !objFormElem.disabled;
}