// valida onKeyPress se não há nenhum caracter problemático
function onKeyPressValidateSecureInput(e){
	var key = window.event ? e.keyCode : e.which;
	var keychar = String.fromCharCode(key);
	//var reg = /[^a-zA-Z0-9ç#£$+*-.=,!@() ]/;
   	//return !reg.test(keychar);
   	//todos os caracteres excepto <>&%\/"'
   	var filter = /[^<>&%\\/"']/;
	return filter.test(keychar);
} 

function onKeyPressBlockNumbers(e)
{
	var key = window.event ? e.keyCode : e.which;
	var keychar = String.fromCharCode(key);
	reg = /\d/;
	return !reg.test(keychar);
}

// valida onKeyPress se foi digitado um numérico
function onKeyPressValidateNumbers(evt){
   var charCode = (evt.which) ? evt.which : event.keyCode
   if (charCode > 31 && (charCode < 48 || charCode > 57))
  	    return false;
   return true;
}

// valida endereço de email  
function validateEmail(email){
	//var filter = /^(\w|\.|-)+@(\w|\.|-)+(\.[a-zA-Z]{2,6})$/ ;
	var filter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i ;
	if (!filter.test(email))
		return false;
	return true;
}

function IsNumeric(sText){
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++){ 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1){
         IsNumber = false;
      }
   }
   return IsNumber;
}

// valida valor numérico
function validateNumber(valor){
	if (isNaN(valor) || valor<0 || Math.round(valor)!=valor)
		return false;
	return true;
}

//valida se dois campos são iguais, usado na confirmação de campos.
function doubleConfirmation(field1, field2){
	if (field1.value==field2.value)
		return true;
	return false;	
}

// valida tamanho mínimo  
function validateMinimumSize(field,len){
	if (field.value.length>=len)
		return true;
	return false;
}

//valida tamanho máximo  
function validateMaximumSize(field,len){
	if (field.value.length<=len)
		return true;
	return false;
}
 
 //valida os campos obrigatórios de um form 
function formValidator(formobj, fieldRequired, fieldDescription, alertMsg){
	var l_Msg = alertMsg.length;

	for (var i = 0; i < fieldRequired.length; i++){
		var obj = formobj.elements[fieldRequired[i]];
			//alert (fieldRequired[i] + '---' + obj.type);
		if (obj){
			switch(obj.type){
			case "select-one":
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "select-multiple":
				if (obj.selectedIndex == -1){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "text":
			case "textarea":
			case "password":
				if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			default:
			}
			if (obj.type == undefined){
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
			}
		}
	}

	if (alertMsg.length == l_Msg){
		return true;
	}else{
		alert(alertMsg);
		return false;
	}
}

//testa se uma data é válida
function isDate(pYear,pMonth,pDay){
	var date = new Date(pYear,pMonth-1,pDay);
	var year = date.getYear()
	if (year<2000){	year = year + 1900;	}	
	var month = parseInt(date.getMonth()+1);
	var day = date.getDate();
	//alert ( year+'=='+pYear +'/'+ month+'=='+pMonth+'/'+ day+'=='+pDay);
	if ((year==pYear) && (month==pMonth) && (day==pDay)){
		return true;
	}else{
		return false;
	}
}


	function validaFormPWRecovery(frm){
	
		alertMsg = null;
		if (validateEmail(frm.email.value))
			alertMsg = null;
		else
			alertMsg = 'O email é inválido.';
			
		if (alertMsg==null){
			return true;
		}else{
			alert(alertMsg);
			return false;
		}				
	
	}

	function validaFormVales(frm){

		var fieldRequired = Array("nib1", "nib2", "nib3", "nib4");
		var fieldDescription = Array("NIB 1.parte","NIB 2. parte","NIB 3.parte","NIB 4.parte");

		var falertMsg = "Preencha por favor os seguintes campos:\n";
		var alertMsg = null;
	
		var nib = frm.nib1.value + frm.nib1.value + frm.nib3.value + frm.nib4.value;
		
		if (formValidator(frm,fieldRequired, fieldDescription, falertMsg)){
			if (validateMinimumSize(frm.nib1,4)){
				if(IsNumeric(nib)){
					if(frm.opcao.options[frm.opcao.selectedIndex].value!='0'){

						alertMsg=null;
					} else {
						alertMsg = "Selecione um Vale";
					}
				} else {
					alertMsg = "NIB não numérico";
				}
			} else {
					alertMsg="NIB incorreto";
			}
			
			if (alertMsg==null){
				return true;
				//alert('OK');
			}else{
				//show('btRegisto');
				alert(alertMsg);
				return false;
			}			
			
		} else {
			return false;
		}
		
	}

	function validaFormRegisto(frm, paramportugalid){

		selectCPInput(frm,paramportugalid);
		//hide('btRegisto');
		//para possibilitar fazer o login depois do registo
		frm.user.value = frm.email.value;
		
		
		//var fieldRequired = Array("nome", "email", "password", "moradaDesc", "ckTermosUso" );
		//var fieldDescription = Array("Nome", "Email", "Password", "Identificação da morada", "Deve aceitar os termos de utilização do serviço");

		if (frm.paisID.options[frm.paisID.selectedIndex].value==paramportugalid){
			var fieldRequired = Array("nome", "email", "password", "moradaDesc", "morada", "cp4", "cp3", "localidade");
			var fieldDescription = Array("Nome", "Email", "Password", "Identificação da morada", "Morada", "Código Postal 1", "Código Postal 2", "Localidade");
		}else{
			var fieldRequired = Array("nome", "email", "password", "moradaDesc", "morada", "cpE", "localidade");
			var fieldDescription = Array("Nome", "Email", "Password", "Identificação da morada", "Código Postal", "Localidade");
		}
		var falertMsg = "Preencha por favor os seguintes campos:\n";
		var alertMsg = null;
				
		if (formValidator(frm,fieldRequired, fieldDescription, falertMsg)){
			//password
			if (validateMinimumSize(frm.password,4))
				if (doubleConfirmation(frm.password, frm.passwordConf))
					//email
					if (validateEmail(frm.email.value))
						if (doubleConfirmation(frm.email, frm.emailConf))	
							if ( isDate(frm.anoN.value,frm.mesN.value,frm.diaN.value)  || (frm.anoN.value==0 && frm.mesN.value==0 && frm.diaN.value==0) )
								alertMsg=null;
							else
								alertMsg = 'A data de nascimento não é uma data válida.';
						else
							alertMsg = 'Confirme por favor o e-mail que escolheu.';
					else
						alertMsg = 'O e-mail é inválido.';
				else
					alertMsg = 'Confirme por favor a password que escolheu.';			
			else
				alertMsg = 'A password deve ter pelo menos 4 caracteres.';
			
			if (alertMsg==null){
				return true;
				//alert('OK');
			}else{
				//show('btRegisto');
				alert(alertMsg);
				return false;
			}		
				
		}else{
			//show('btRegisto');
			return false;
		}
		
	}
		
	
	

