/* 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 radio buttons, assume que estão num grupo, ou seja varios com o mesmo nome, verifica se pelo menos
						um esta checked 
			 */
function verificarCamposForm(objForm){
	//Array de mensagens descritivas do problema, indexadas pelo tipo de validacao
	var msgsDescProb=new Array('está vazio', 'tem que conter um número', 'tem que conter um endereço de email válido',
														 'tem de escolher uma opção');
	var msgAlerta='Ocorreram os seguintes problemas:\n';
	//As mensagens com textoValidacao e msgDescProb indexada ao tipo de validacao escolhido
	var msgAlertaProbs='';
	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;
					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:
					//Verificar se está checked
					if(objFormElem.checked=='')
						validacaoFalhou=true;
					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;
}
