/*  /////////////////  /////////////////  */
//		SCRIPTS VALIDAR FORMULÁRIO - CAMPOS DE INPUT
//		REFORMULADO EM :	30-12-2002;
//		ALTERADO EM	:		14-11-2003;
//		AUTOR:				Mário Medeiros
/*  /////////////////  /////////////////  */


/* CONSTANTES */
var CTEXTO		= 1;
var CNUMERO		= 2;
var CEMAIL		= 3;
var CANO		= 4;
var CHORA		= 5;
var CDATA		= 6;
var CPASS		= 7;
var CSELECT		= 8;
var CEURO		= 9;
var CDATA2		= 62;
var CNUMERO2	= 22;
var CDATAHORA	= 65;

var NAOCONTA = "VALOR_QUE_NAO_E_LIMITADO";
var PERMITIR_VAZIO = true;
var NAO_PERMITIR_VAZIO = false;
var CTXTCONFIRM = "ALERTA:\n\nPretende submeter este formulário e continuar."

/* ARRAYS CONSTANTES */
var VAL_LETRAS	= new Array();
var VAL_MASCARA	= new Array();
var VAL_MSG		= new Array();
var VAL_T_MIN	= new Array();
var VAL_T_MAX	= new Array();
var VAL_MIN		= new Array();
var VAL_MAX		= new Array();


// CARACTERES POSSIVEIS NA VALIDAÇÃO DE CAMPOS
VAL_LETRAS[CTEXTO]	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ0123456789;:,.&ºª-\/()+@_´` \t\r\n\f" ;
VAL_LETRAS[CNUMERO] = "0123456789" ;
VAL_LETRAS[CEMAIL]	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;:,.&ºª-\/()+@_" ;
VAL_LETRAS[CANO]	= "0123456789" ;
VAL_LETRAS[CHORA]	= "0123456789:" ;
VAL_LETRAS[CDATA]	= "0123456789-" ;
VAL_LETRAS[CEURO]	= "0123456789," ;
VAL_LETRAS[CDATA2]	= "0123456789-" ;
VAL_LETRAS[CNUMERO2]	= "0123456789," ;
VAL_LETRAS[CDATAHORA]	= "0123456789-: " ;

// MASCARAS A USAR NOS CAMPOS
VAL_MASCARA[CTEXTO]		=  NAOCONTA;
VAL_MASCARA[CNUMERO]	= /[0-9]/ ;
VAL_MASCARA[CEMAIL]		= /^.+\@.+\..+$/ ;
VAL_MASCARA[CANO]		= /[0-9]/ ;
VAL_MASCARA[CHORA]		= /^[0-9]+:+[0-9]$/ ; // NOTA : " \d " significa digitos [0-9]
VAL_MASCARA[CDATA]		= /[0-9]-[0-9]-[0-9]/ ;
VAL_MASCARA[CEURO]		= /^[0-9]+,+[09]$/ ; // NOTA : " \d " significa digitos [0-9]
VAL_MASCARA[CDATA2]		= /[0-9]-[0-9]/ ;
VAL_MASCARA[CNUMERO2]		=  /^[0-9]+,+[05]$/ ;
VAL_MASCARA[CDATAHORA]		= /[0-9]-[0-9]-[0-9] [0-9]+:+[0-9]+:+[0-9]/ ;

//VALORES DOS TAMANHOS DOS CAMPOS POR DEFEITO
//MIN
VAL_T_MIN[CTEXTO]	= 2 ;
VAL_T_MIN[CNUMERO]	= 1 ;
VAL_T_MIN[CEMAIL]	= 8 ;
VAL_T_MIN[CANO]		= 2 ;
VAL_T_MIN[CHORA]	= 5 ;
VAL_T_MIN[CDATA]	= 10 ;
VAL_T_MIN[CEURO]	= 4 ;
VAL_T_MIN[CDATA2]	= 10 ;
VAL_T_MIN[CNUMERO2]	= 1 ;
VAL_T_MIN[CDATAHORA] = 19 ;

//MAX
VAL_T_MAX[CTEXTO]	= 50 ;
VAL_T_MAX[CNUMERO]	= 10 ;
VAL_T_MAX[CEMAIL]	= 255 ;
VAL_T_MAX[CANO]		= 4 ;
VAL_T_MAX[CHORA]	= 5 ;
VAL_T_MAX[CDATA]	= 10 ;
VAL_T_MAX[CEURO]	= 15 ;
VAL_T_MAX[CDATA2]	= 10 ;
VAL_T_MAX[CNUMERO2]	= 10 ;
VAL_T_MAX[CDATAHORA] = 19 ;

//VALORES MINIMOS E MÁXIMOS DOS CAMPOS POR DEFEITO
//MIN
VAL_MIN[CTEXTO]		= NAOCONTA ;
VAL_MIN[CNUMERO]	= 0 ;
VAL_MIN[CEMAIL]		= NAOCONTA ;
VAL_MIN[CANO]		= 1900 ;
VAL_MIN[CHORA]		= "00:00" ;
VAL_MIN[CDATA]		= "1950-05-10" ;
VAL_MIN[CEURO]		= "0,00" ;
VAL_MIN[CDATA2]		= "1900-01" ;
VAL_MIN[CNUMERO2]	= "0" ;
VAL_MIN[CDATAHORA]	= "1950-05-10 00:00:00" ;

//MAX
VAL_MAX[CTEXTO]		= NAOCONTA ;
VAL_MAX[CNUMERO]	= 9999999999 ;
VAL_MAX[CEMAIL]		= NAOCONTA ;
VAL_MAX[CANO]		= 2003 ;
VAL_MAX[CHORA]		= "23:59";
VAL_MAX[CDATA]		= "2004-10-31";
VAL_MAX[CEURO]		= "999999999999,99";
VAL_MAX[CDATA2]		= "2004-12";
VAL_MAX[CNUMERO2]	= "9999999999,9" ;
VAL_MAX[CDATAHORA]	= "2010-05-10 24:59:59" ;


// MENSAGENS A MOSTRAR NOS ERROS DE CAMPOS
VAL_MSG[CTEXTO]		= "Introduzir apenas letras, dígitos, espaços e    ;:,.&ºª-\/()_+´`   (não pode usar as aspas \" e ')" ;
VAL_MSG[CNUMERO]	= "Introduzir apenas digitos de 0 a 9" ;
VAL_MSG[CEMAIL]		= "Introduza um endereço de e-mail válido" ;
VAL_MSG[CANO]		= "Introduzir apenas digitos de 0 a 9" ;
VAL_MSG[CHORA]		= "Introduzir apenas digitos de 0 a 9 com \":\" a separar as horas dos minutos. ex \"09:30\"" ;
VAL_MSG[CDATA]		= "Introduzir apenas digitos de 0 a 9 com \"-\" a separar o ano, mês e dia (ex. \""+VAL_MAX[CDATA]+"\")" ;
VAL_MSG[CSELECT]	= "Seleccione uma opção" ;

VAL_MSG[CEURO]		= "Introduzir apenas digitos de 0 a 9 com \",\" a separar o Euro dos Cêntimos (ex. 125,03)" ;

VAL_MSG[CDATA2]		= "Introduzir apenas digitos de 0 a 9 com \"-\" a separar o ano e mês (ex. \""+VAL_MAX[CDATA2]+"\")" ;

VAL_MSG[CNUMERO2]	= "Introduzir apenas digitos de 0 a 9 e \",\" a separar a casa décimal (ex. \"35,0\")" ;
VAL_MSG[CDATAHORA]	= "Introduzir apenas digitos de 0 a 9 com \"-\" a separar o ano, mês, dia e \":\" a separar hora, minuto, segundo (ex. \""+VAL_MAX[CDATAHORA]+"\")" ;


function CheckEmpty(strchk,strname){
	if (strchk == ""){
		alert("Favor Introduzir um valor no campo \"" + strname + "\".");
		return (false);}else{return (true);}
}

function CheckEqual(strchk1,strname1,strchk2,strname2){
	if (strchk1 != strchk2){
		alert("O Campo " + strname1 + " é diferente do Campo " + strname2 + ".");
	return (false);}else{return (true);}
}

function CheckSize(strvalue,strname,strminsize,strmaxsize){
	checkStr = strvalue ;
	
	if (strminsize == strmaxsize){
		if (checkStr.length < strminsize)
		{
			alert("O campo \"" + strname + "\" tem de ter " + strminsize + " caracteres (tem " + (strminsize - checkStr.length) + " a menos).");
			return (false);
		}
		else if (checkStr.length > strmaxsize){
			alert("O campo \"" + strname + "\" excede os " + strmaxsize + " caracteres (tem " + (checkStr.length - strmaxsize) + " a mais).");
			return (false);
		}else{	return (true);}
	}
	else{				

		if (checkStr.length < strminsize)
		{
			alert("O campo \"" + strname + "\" tem de ter pelo menos " + strminsize + " caracteres (tem " + (strminsize - checkStr.length) + " a menos).");
			return (false);
		}
		else if (checkStr.length > strmaxsize){
			alert("O campo \"" + strname + "\" excede os " + strmaxsize + " caracteres (tem " + (checkStr.length - strmaxsize) + " a mais).");
			return (false);
		}else{	return (true);}
	}
}

function CheckValid(strtochk,strchk,msgstr,strname){
	
	var checkOK = strchk;
	var checkStr = strtochk;
	var allValid = true;
	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				alert(msgstr + " no campo \"" + strname + "\".");
				allValid = false;
				break;
			}
	}
	return (allValid) ;
}

function CheckEMail(eaddress, strname){
	
	var reEmail		= /^.+\@.+\..+$/ ;

	if ((eaddress == null) || (eaddress.length == 0)) {
       	if (CheckEMail.arguments.length == 1) {
       		//alert("Favor Introduzir um Endereço de E-Mail válido.");
			alert(VAL_MSG[CEMAIL] + " no campo \"" + strname + "\" .");
       		return false ;
       	} else {
       		if (!(CheckEMail.arguments[1] == true)) {
       			alert(VAL_MSG[CEMAIL] + " no campo \"" + strname + "\" .");
       		}
       		return (CheckEMail.arguments[1] == true);
       	}
    } else {
		if (!(reEmail.test(eaddress))) {
			alert(VAL_MSG[CEMAIL] + " no campo \"" + strname + "\" .");
		}
       return reEmail.test(eaddress) ;
    }
}

function CheckMascara(Texto, Mascara, msgstr, strname){
	return true ;
	if ((Texto == null) || (Texto.length == 0)) {
			alert(msgstr + " no campo \"" + strname + "\".");
       		return false ;
	}
	else {
		
		if (Mascara == NAOCONTA){
			return true ;
		}
		if(!(Mascara.test(Texto))){
			alert(msgstr + " no campo \"" + strname + "\".");
			return false ;
		}
       return Mascara.test(Texto);
    }
}

function ValorMin(Valor, ValorMin){
	if (ValorMin == NAOCONTA || Valor >= ValorMin){
		return (true);
	}
	else{return (false);}
}

function ValorMax(Valor, ValorMax){
	if (ValorMax == NAOCONTA || Valor <= ValorMax){
		return (true);
	}
	else{return (false);}
}


function ValidarSelect(PCampo, PNome, PNull){
	XStr = PCampo;
	XName = PNome ;
	XNulls = PNull;

	//alert("VALOR de \"" + XStr.name + "\ = \"" + XStr.value + "\".");
	
	if (XStr.value == 0 && XNulls) return(true);

	if (XStr.value <= 0 ){

		alert(VAL_MSG[CSELECT] + " no campo \"" + XName + "\".");

		XStr.focus();
		return (false)
	}

	return(true);
}

function mLimparString(str){
	//LIMPAR OS ESPAÇOS EM BRANCO
	//alert("SAIU -"+str+"-");
	ArrSTR = str.split(" ");
	
	var strFinal = "";
	var strEspaco = "";
	
	for (xpo = 0; xpo < ArrSTR.length; xpo++){
		if (ArrSTR[xpo] != ""){
			strFinal = strFinal + strEspaco + ArrSTR[xpo];
			strEspaco = " ";
		}
	}
	//alert("SAIU -"+strFinal+"-");
	return(strFinal);
}


function ValidarCampo(PCampo,PNome,PTipo,PTamanhoMin, PTamanhoMax, PValorMin, PValorMax, PMascara, PNull){
	
	XStr = PCampo;
	XMinSize = PTamanhoMin;
	XMaxSize = PTamanhoMax;	
	XMinValor = PValorMin;
	XMaxValor = PValorMax;
	XName = PNome ;
	XNulls = PNull;
	
	//alert(XStr.value);
	
	XStr.value = mLimparString(XStr.value);
	
	if (XStr.value == "" && XNulls) return(true);
	//if (PTamanhoMin == 0 && XStr.value == "0" && XNulls) return(true);
	
	
	if (CheckEmpty(XStr.value,XName) && CheckSize(XStr.value,XName,XMinSize,XMaxSize) && CheckValid(XStr.value, VAL_LETRAS[PTipo], VAL_MSG[PTipo], XName) && CheckMascara(XStr.value, PMascara, VAL_MSG[PTipo], XName)){
		

		// Para Validar se Realmente é data ou é hora
		if(PTipo==CTEXTO){
			//Valor = XStr.value			
			//XStr.value = mLimparString(XStr.value);	
		}
		
		if(PTipo==CNUMERO){
			/*
			Valor = XStr.value
			
			if (parseInt(Valor) == 0){
				alert(VAL_MSG[CNUMERO] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			*/
			
		}
		if(PTipo==CEURO){
			Valor = XStr.value
			
			AValorAct = Valor.split(",");
			if (AValorAct.length != 2){
				alert(VAL_MSG[CEURO] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			
			if (AValorAct[1].length != 2){
				alert(VAL_MSG[CEURO] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			
		}
		if(PTipo==CNUMERO2){
			Valor = XStr.value
			
			AValorAct = Valor.split(",");
			
			if (AValorAct.length < 2){
				alert(VAL_MSG[CNUMERO2] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			
			//AValorAct.length
			//alert(AValorAct.length);
			if (AValorAct[1].length != 1){
				alert(VAL_MSG[CNUMERO2] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			if (parseInt(AValorAct[1]) != 5 && parseInt(AValorAct[1]) != 0){
				alert(VAL_MSG[CNUMERO2] + " no campo \"" + XName + "\".\n\n NOTA: A casa décimal só pode ser \"0\" ou \"5\" (ex: \"36,0\" ou \"37,5\" ).");
				XStr.focus();
				return (false);
			}
			
		}
		
		

		if(PTipo==CDATA){
			Valor = XStr.value
			
			ADataAct = Valor.split("-");
			ADataMin = PValorMin.split("-");
			ADataMax = PValorMax.split("-");
			
			
			
			if (ADataAct.length > 3 || ADataAct.length < 3 || ADataAct[0].length != 4 || ADataAct[1].length != 2 || ADataAct[2].length != 2){
				alert(VAL_MSG[CDATA] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			
						
			if (ADataAct[0] < ADataMin[0] || ADataAct[0] > ADataMax[0]){
					alert("Introduza um ANO válido entre \""+ ADataMin[0] +"\" e \""+ ADataMax[0] +"\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}

			if (ADataAct[0] < ADataMin[0] || ADataAct[0] > ADataMax[0]){
					alert("Introduza um ANO válido entre \""+ ADataMin[0] +"\" e \""+ ADataMax[0] +"\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			/// MIN
			if (ADataAct[0] == ADataMin[0] && (ADataAct[1] < ADataMin[1] || ADataAct[1] > 12)){
					alert("Introduza um MÊS válido entre \""+ ADataMin[1] +"\" e \"12\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			if (ADataAct[0] == ADataMin[0] && ADataAct[1] == ADataMin[1] && (ADataAct[2] < ADataMin[2] || ADataAct[2] > 31)){
					alert("Introduza um DIA válido entre \""+ ADataMin[1] +"\" e \"31\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}

			/// MAX
			if (ADataAct[0] == ADataMax[0] && (ADataAct[1] > ADataMax[1] || ADataAct[1] < 1)){
					alert("Introduza um MÊS válido entre \"01\" e \""+ ADataMax[1] +"\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			if (ADataAct[0] == ADataMax[0] && ADataAct[1] == ADataMax[1] && (ADataAct[2] > ADataMax[2] || ADataAct[2] < 1)){
					alert("Introduza um DIA válido entre \"01\" e \""+ ADataMax[2] +"\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}

			
			// MESES 
			if (ADataAct[1] < 1 || ADataAct[1] > 12){
					alert("Introduza um MÊS válido entre \"1\" e \"12\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			// DIAS
			if (ADataAct[2] < 1 || ADataAct[2] > 31){
					alert("Introduza um DIA válido entre \"1\" e \"31\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			//Tirar Depois 2 linhas a seguir
			//alert ("FIM")
			//XStr.focus();
			//return (false);
		
		}

		if(PTipo==CDATA2){ //formato AAAA-MM
			Valor = XStr.value
			
			ADataAct = Valor.split("-");
			ADataMin = PValorMin.split("-");
			ADataMax = PValorMax.split("-");
			
			
			
			if (ADataAct.length > 2 || ADataAct.length < 2 || ADataAct[0].length != 4 || ADataAct[1].length != 2){
				alert(VAL_MSG[CDATA] + " no campo \"" + XName + "\".");
				XStr.focus();
				return (false);
			}
			
						
			if (ADataAct[0] < ADataMin[0] || ADataAct[0] > ADataMax[0]){
					alert("Introduza um ANO válido entre \""+ ADataMin[0] +"\" e \""+ ADataMax[0] +"\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}

			if (ADataAct[0] < ADataMin[0] || ADataAct[0] > ADataMax[0]){
					alert("Introduza um ANO válido entre \""+ ADataMin[0] +"\" e \""+ ADataMax[0] +"\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			/// MIN
			if (ADataAct[0] == ADataMin[0] && (ADataAct[1] < ADataMin[1] || ADataAct[1] > 12)){
					alert("Introduza um MÊS válido entre \""+ ADataMin[1] +"\" e \"12\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			/*
			if (ADataAct[0] == ADataMin[0] && ADataAct[1] == ADataMin[1] && (ADataAct[2] < ADataMin[2] || ADataAct[2] > 31)){
					alert("Introduza um DIA válido entre \""+ ADataMin[1] +"\" e \"31\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			*/

			/// MAX
			if (ADataAct[0] == ADataMax[0] && (ADataAct[1] > ADataMax[1] || ADataAct[1] < 1)){
					alert("Introduza um MÊS válido entre \"01\" e \""+ ADataMax[1] +"\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			if (ADataAct[0] == ADataMax[0] && ADataAct[1] == ADataMax[1] && (ADataAct[2] > ADataMax[2] || ADataAct[2] < 1)){
					alert("Introduza um DIA válido entre \"01\" e \""+ ADataMax[2] +"\" no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}

			
			// MESES 
			if (ADataAct[1] < 1 || ADataAct[1] > 12){
					alert("Introduza um MÊS válido entre \"1\" e \"12\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			
			// DIAS
			/*
			if (ADataAct[2] < 1 || ADataAct[2] > 31){
					alert("Introduza um DIA válido entre \"1\" e \"31\" a  no campo \"" + XName + "\".");
					XStr.focus();
					return (false);
			}
			*/

			//Tirar Depois 2 linhas a seguir
			//alert ("FIM")
			//XStr.focus();
			//return (false);
		
		}
		if(PTipo==CHORA){}
		if(PTipo==CANO){}

		if(PTipo==CEMAIL){
			
			if (!CheckEMail(XStr.value,XName)){
				XStr.focus();
				return (false);
			}
		}

		
			if (!ValorMin(XStr.value, XMinValor)){
					if (XMinValor == XMaxValor){
						alert("Favor introduzir um valor válido no campo \"" + XName + "\" igual a \"" + XMinValor + "\".");
						XStr.focus();
						return (false);
					}else{
						alert("Favor introduzir um valor válido no campo \"" + XName + "\" igual a \"" + XMinValor + "\".");
						XStr.focus();
						return (false);
					}
			}
			if (!ValorMax(XStr.value, XMaxValor)){
					if (XMinValor == XMaxValor){
						alert("Favor introduzir um valor válido no campo \"" + XName + "\" igual a \"" + XMinValor + "\".");
						XStr.focus();
						return (false);
					}else{
						alert("Favor introduzir um valor válido no campo \"" + XName + "\" igual ou menor do que  \"" + XMaxValor + "\".");
						XStr.focus();
						return (false);
					}
			}
		
		return(true);
	}
	else{	
		XStr.focus();
		return (false);
	}

	return(true);
}// FINAL DA FUNÇÃO


function CaePescador(str){

	var astr = str.split("");

	if(astr.length >= 3){
		if(astr[0]=="0" && astr[1]=="5" && astr[2] == "0"){
			return(true);
		}else{
			return(false);
		}
	}else{
		return(false);
	}
}

function mEZero(Valor){//13-10-2004
	var val = Valor;
	//alert("VALOR: " + Valor);
	
	var AVal = Valor.split(",");
	
	posUni = parseFloat(AVal[0]);
	//alert("posUni: " + posUni);
	if(AVal.length > 1){
		
		posDec = parseFloat(AVal[1]);
		
		//alert("posDec: " + posDec);
		
		if(posUni == 0 && posDec == 0)
			return(true)
		else
			return(false);
		
	}else{
		if(posUni == 0)
			return(true)
		else
			return(false);
	}

	return(false);
}

function mSetPNT(Valor){//19-10-2004
	var AValorAct = Valor.split(",");
	
	if (AValorAct.length < 2){
		return(Valor + "," + "0" );
	}else{
		return(Valor);
	}
}


function mGetCasaUm(str){

	var astr = str.split("");

	return(parseFloat(astr[0]));
}


function mTestInArray(Valor, Arr){

  var key; 
  for (key in Arr){
	  if(Valor == Arr[key]) return(true);
  }
  return(false);
}

