
	//##################################################################################
	//## Modulo: valGeneralForm.js
	//## Versao: 1.0.0
	//## Objectivo: Funcionalidades comuns a todas as páginas do site
	//##
	//## Autor(es): Eduardo Freire (eduardof@factordigital.com)
	//## Data de criacao: 18 de Abril de 2001
	//## Data da ultima alteracao:
	//##################################################################################

function validateInput(frm, mask){
	//FAZ A CONTAGEM DOS ELEMENTOS DE UMA FORM
	var FrmLen = frm.elements.length;
	
	var frmlen = frm.elements.name; 
	//VALIDA A STRING DA MASK 
	var maskarr = mask;
	
	//PERCORRRE TODOS OS ELEMENTOS DA FORM
	for (var i = 0; i < FrmLen; i++)
	{
		//BUSCA DO CARACTER NA STRING DA MASK
		maskarr = mask.substring(i,i+1)
		

		var valDate = 1;
		var valText = 1;
		var valInteger = 1;
		var valTelenum = 1;
		var valEmail = 1;
		var valAlphaChar = 1;
		var valDateOP = 1;
		var valTextOP = 1;
		var valIntegerOP = 1;
		var valTelenumOP = 1;
		var valEmailOP = 1;
		var valAlphaCharOP = 1;
	
	//CAMPO CORREPONDENTE A CADA CARACTER DA STRING DA MASK
	if (maskarr == "d")
	{
		valDate = validateDate(frm.elements[i].value);
		valFieldDate = frm.elements[i].title;
	}
	if (maskarr == "c")
	{
		valAlphaChar = validateAlphaChar(frm.elements[i].value);
		valFieldAlphaChar = frm.elements[i].title;
	}
	if (maskarr == "i")
	{
		valInteger = validateInteger(frm.elements[i].value);
		valFieldInteger = frm.elements[i].title;
	}
	if (maskarr == "n")
	{
		valTelenum = validateTeleNum(frm.elements[i].value);
		valFieldTelenum = frm.elements[i].title;
	}
	if (maskarr == "e")
	{
		valEmail = validateEmail(frm.elements[i].value);
		valFieldEmail = frm.elements[i].title;
	}
	if (maskarr == "t")
	{
		valText = validateText(frm.elements[i].value);
		valFieldText = frm.elements[i].title;
	}
	if (maskarr == "D")
	{
		valDateOP = validateDateOP(frm.elements[i].value);
		valFieldDate = frm.elements[i].title;
	}
	if (maskarr == "C")
	{
		valAlphaCharOP = validateAlphaCharOP(frm.elements[i].value);
		valFieldAlphaChar = frm.elements[i].title;
	}
	if (maskarr == "I")
	{
		valIntegerOP = validateIntegerOP(frm.elements[i].value);
		valFieldInteger = frm.elements[i].title;
	}
	if (maskarr == "N")
	{
		valTelenumOP = validateTeleNumOP(frm.elements[i].value);
		valFieldTelenum = frm.elements[i].title;
	}
	if (maskarr == "E")
	{
		valEmailOP = validateEmailOP(frm.elements[i].value);
		valFieldEmail = frm.elements[i].title;
	}
	if (maskarr == "T")
	{
		valTextOP = validateTextOP(frm.elements[i].value);
		valFieldText = frm.elements[i].title;
	}
	//SE OS DADOS INTRODUZIDOS NÃO ESTIVEREM CORRECTOS OU PREENCHIDOS, AVISA O USER
	if (! valDate)
	{
		alert("O campo '" + valFieldDate + "' não foi preenchido ou está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valAlphaChar)
	{
		alert("O campo '" + valFieldAlphaChar + "' não foi preenchido ou está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valInteger)
	{
		alert("O campo '" + valFieldInteger + "' não foi preenchido ou está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valText)
	{
		alert("O campo '" + valFieldText + "' não foi preenchido ou está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valTelenum)
	{
		alert("O campo '" + valFieldTelenum + "' não foi preenchido ou está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valEmail)
	{
		putFocus(frm.elements[i]);
		return false;
	}
	//SE OS DADOS INTRODUZIDOS APENAS NÃO ESTIVEREM CORRECTOS, AVISA O USER
	if (! valDateOP)
	{
		alert("O campo '" + valFieldDate + "' está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valAlphaCharOP)
	{
		alert("O campo '" + valFieldAlphaChar + "' está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valIntegerOP)
	{
		alert("O campo '" + valFieldInteger + "' está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valTextOP)
	{
		alert("O campo '" + valFieldText + "' está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valTelenumOP)
	{
		alert("O campo '" + valFieldTelenum + "' está incorrecto!!");
		putFocus(frm.elements[i]);
		return false;
	}
	if (! valEmailOP)
	{
		putFocus(frm.elements[i]);
		return false;
	}
	}
	return true;
}

//FUNÇÃO DE VALIDAÇÃO DA DATA
function validateDate(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES) E CONTEUDO
	if (field.length > 0)
	{
		//CRIA UM ARRAY PARA ESTRUTURAR A DATA EM: (dd/mm/yyyy)
		strarr = new Array ()

		//USU DA FUNÇÃO own_split PARA DIVIDIR A STRING DA DATA
		own_split(strarr, field, "/");
		
		//3 ELEMENTOS DO ARRAY (DIA, MES, ANO)
		if (strarr.length == 3)
		{
			//VERIFICA O TAMANHO DO ARRAY E LIMITA CADA UM DELES
			for (var i = 0; i < strarr.length; i++)
			{
				if ((strarr[0] <= 0) || (strarr[0] >31)){
					return false;
				}
				if ((strarr[1] <= 0) || (strarr[1] >12)){
					return false;
				}
				if ((strarr[2] < 1000) || (strarr[2] >3000)){
					return false;
				}
			}
			return true;
		}
		return false;
	}
	return false;
}

//FUNÇÃO DE VALIDAÇÃO DE CARACTERES ALFABÉTICOS
function validateAlphaChar(field) {
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SEU TAMANHO(EM CARACTERES) E CONTEUDO
	if (field.length > 0)
	{
		var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXWYZáÁàÀéÉèÈíÍìÌóÓòÒúÚùÙãõÃÕâêîôûÂÊÎÔÛºª.äÄëËïÏöÖüÜ "
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok != "no") {
		return true;
	}
	return false;
	}
	return false;
}

//FUNÇÃO DE VALIDAÇÃO DE NÚMEROS INTEIROS
function validateInteger(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES) E CONTEUDO
	if (field.length > 0)
	{
		var valid = "0123456789."
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++)
		{
			temp = "" + field.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
			}
			if (ok != "no")
			{
				return true;
			}
		return false;
	}
	return false;	
}

//FUNÇÃO DE VALIDAÇÃO DE NÚMEROS DE TELEFONE
function validateTeleNum(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES) E CONTEUDO
	if (field.length >= 7) 
	{
		for (i = 0;  i < field.length;  i++)
 		{
		    	ch = field.charAt(i);
			if(! own_instring(ch))
			{
			return false;
			}
		}
		return true;
	}
	return false;
}

//FUNÇÃO DE VALIDAÇÃO DE TEXTO
function validateText(field) {
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES) E CONTEUDO
	if (field.length > 0)
	{
		var invalid = "'"
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (invalid.indexOf(temp) != "-1") ok = "no";
		}
		if (ok != "no") {
		return true;
	}
	return false;
	}
	return false;
}


//FUNÇÃO DE VALIDAÇÃO DE E-MAIL
function validateEmail (field) {
/*VERIFICA SE O FORMÁTO OBEDECE AO PADRÃO: user@domínio. TAMBÉM SEPARA O USERNAME 
   DO DOMÍNIO */
var emailPat=/^(.+)@(.+)$/
// EVITA QUE SE UTILIZE CARACTERES ESPECIAIS NO "ADRESS" 
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]'"
//CARACTERES PROIBÍDOS
var validChars="\[^\\s" + specialChars + "\]"
//VALIDA AS ÁSPAS PARA CASOS ESPECIAIS
var quotedUser="(\"[^\"]*\")"
//POSSIBILITA A UTILIZAÇÃO NO DOMÍNIO
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
//ESTRUTURA DO USERNAME
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=field.match(emailPat)
if (matchArray==null) {
  	alert("Email incorrecto (Verifique se utilizou '@' e '.')")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

//VALIDAÇÃO DO USERNAME
if (user.match(userPat)==null) {
    alert("Username inválido!!")
    return false
}

//VALIDAÇÃO DO IP , CASO SE UTILIZE 
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
 	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Aderesso IP inválido!!")
		return false
	    }
    }
    return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("O nome do domínio pode não estar válido!!")
    return false
}
//CONTAGEM DOS BLOCOS
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   alert("A morada tem de terminar com duas ou três letras!!")
   return false
}

//VERIFICA SE EXISTE UM "HOST NAME" ANTES DO DOMÍNIO.
if (len<2) {
   var errStr="Falta o nome do host"
   alert(errStr)
   return false
}
return true;
}
//FUNÇÃO DE VALIDAÇÃO DA DATA OPCIONALMENTE
function validateDateOP(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES)
	if (field.length > 0) 
	{
		//CRIA UM ARRAY PARA ESTRUTURAR A DATA EM: (dd/mm/yyyy)
		strarr = new Array ()

		//USU DA FUNÇÃO own_split PARA DIVIDIR A STRING DA DATA
		own_split(strarr, field, "/");
		
		//3 ELEMENTOS DO ARRAY (DIA, MES, ANO)
		if (strarr.length == 3)
		{
			//VERIFICA O TAMANHO DO ARRAY E LIMITA CADA UM DELES
			for (var i = 0; i < strarr.length; i++)
			{
				if ((strarr[0] <= 0) || (strarr[0] >31)){
					return false;
				}
				if ((strarr[1] <= 0) || (strarr[1] >12)){
					return false;
				}
				if ((strarr[2] < 1000) || (strarr[2] >3000)){
					return false;
				}
			}
			return true;
		}
		return false;
	}
	return true;
}

//FUNÇÃO DE VALIDAÇÃO DE CARACTERES ALFABÉTICOS OPCIONALMENTE
function validateAlphaCharOP(field) {
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES)
	if (field.length > 0)
	{
		var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXWYZáÁàÀéÉèÈíÍìÌóÓòÒúÚùÙãõÃÕâêîôûÂÊÎÔÛºª.äÄëËïÏöÖüÜ "
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok != "no") {
		return true;
	}
	return false;
	}
	return true;
}

//FUNÇÃO DE VALIDAÇÃO DE NÚMEROS INTEIROS OPCIONALMENTE
function validateIntegerOP(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES)
	if (field.length > 0)
	{
		var valid = "0123456789"
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++)
		{
			temp = "" + field.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
			}
			if (ok != "no")
			{
				return true;
			}
		return false;
	}
	return true
}

//FUNÇÃO DE VALIDAÇÃO DE NÚMEROS DE TELEFONE OPCIONALMENTE
function validateTeleNumOP(field)
{
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES)
if (field.length > 0)
	{	
	if (field.length >= 7) 
	{
		for (i = 0;  i < field.length;  i++)
 		{
		    	ch = field.charAt(i);
			if(! own_instring(ch))
			{
			return false;
			}
		}
		return true;
	}
	return false;
  }
  return true;
}

//FUNÇÃO DE VALIDAÇÃO DE TEXTO OPCIONALMENTE
function validateTextOP(field) {
	//VERIFICA SE EXISTE CONTEÚDO E CASO ESTE EXISTA VERIFICA O SER TAMANHO(EM CARACTERES)
	if (field.length > 0)
	{
		var invalid = "'"
		var ok = "yes";
		var temp;
		for (var i=0; i<field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (invalid.indexOf(temp) != "-1") ok = "no";
		}
		if (ok != "no") {
		return true;
	}
	return false;
	}
	return true;
}


//FUNÇÃO DE VALIDAÇÃO DE E-MAIL OPCIONALMENTE
function validateEmailOP(field) {
if (field.length > 0)
	{
/*VERIFICA SE O FORMÁTO OBEDECE AO PADRÃO: user@domínio. TAMBÉM SEPARA O USERNAME 
   DO DOMÍNIO */
var emailPat=/^(.+)@(.+)$/
// EVITAQUE SE UTILIZE CARACTERES ESPECIAIS NO "ADRESS" 
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
//CARACTERES PROIBÍDOS
var validChars="\[^\\s" + specialChars + "\]"
//VALIDA AS ÁSPAS PARA CASOS ESPECIAIS
var quotedUser="(\"[^\"]*\")"
//POSSIBILITA A UTILIZAÇÃO NO DOMÍNIO
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
//ESTRUTURA DO USERNAME
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=field.match(emailPat)
if (matchArray==null) {
  	alert("Email incorrecto (Verifique se utilizou '@' e '.')")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

//VALIDAÇÃO DO USERNAME
if (user.match(userPat)==null) {
    alert("Username inválido!!")
    return false
}

//VALIDAÇÃO DO IP , CASO SE UTILIZE 
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
 	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Aderesso IP inválido!!")
		return false
	    }
    }
    return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("O nome do domínio pode não estar válido!!")
    return false
}
//CONTAGEM DOS BLOCOS
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   alert("A morada tem de terminar com duas ou três letras!!")
   return false
}

//VERIFICA SE EXISTE UM "HOST NAME" ANTES DO DOMÍNIO.
if (len<2) {
   var errStr="Falta o nome do host"
   alert(errStr)
   return false
}
return true;
}
	return true;
}
function own_instring(c)
{
	var checkOK = "0123456789-+-. ()\t\r\n\f";
	var ret  = false;

  		for (j = 0;  j < checkOK.length;  j++)
		{
      			if (c != checkOK.charAt(j))
			{
			continue;
			}
			else
			{
			ret = true;
			break;
			}
		}
	return ret;
}

//FAZ A DIVISÃO DA STRING DATA EM TRÊS PARTES (1/2/3)
function own_split(arr, str, delim)
{
	var pos = 0;
	var num = 0;
	var start = 0;
	
	//PERCORRE A STRING ENQUANTO EXISTIREM CARACTERES
	while (pos < str.length)
	{
		//PERCORRE A STRING ENQUANTO EXISTIREM DELIMITADORES
		while((str.substring (pos, pos+1) != delim) && (pos < str.length))
		{
		pos++;
		}
		//ADICIONA OS NOVOS CARACTERES AO ARRAY DE OUTPUT
		arr[num] = str.substring(start,pos);
		num++;
		start = pos+1;
		pos++;
	}
}
function putFocus(elementStr)
   {
   elementStr.value="";
   elementStr.focus();
   }
//-->


