function emailCheck (emailStr) {

var checkTLD=1;

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray=emailStr.match(emailPat);

if (matchArray==null) {
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
return false;
   }
}

if (user.match(userPat)==null) {

return false;
}

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
return false;
   }
}
return true;
}

var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
return false;
}

if (len<2) {
return false;
}

return true;
}

//-------------------------------------------------------------------------------------------------------------------

function DataValida(sValor, sFormato){

var dDiasdMeses      //array dos limites dos dMeses
var dDia, dMes, dAno //variaveis auxiliares para converter a data
var ComecaMes        //Onde se prevê que comece o mês
var Separador1       //1º Separador
var Separador2       //2º Separador
var Resultado        //Resultado da função

Resultado=false

ConverterData=-1 //assume que não vai conseguir converter

dDiasdMeses = new Array(31,28,31,30,31,30,31,31,30,31,30,31)

if (sValor.length==10){ //tem de ter 10 caracteres

ComecaMes=3 //onde se prevê que começa o Mês

switch (sFormato.substr(0,2)){ //começa pelos dois
	case 'dd': dDia=sValor.substr(0, 2)
		break
	case 'mm': dMes=sValor.substr(0, 2)
		break
	case 'aa': dAno=sValor.substr(0, 4)
	ComecaMes=5 //o mês começa mais tarde
} //dois digitos

Separador1=sValor.substr(ComecaMes-1, 1)
Separador2=sValor.substr(ComecaMes+2, 1)

switch (sFormato.substr(ComecaMes, 2)){
	case 'dd': dDia=sValor.substr(ComecaMes, 2)
		break
	case 'mm': dMes=sValor.substr(ComecaMes, 2)
}

switch (sFormato.substr(sFormato.length-2, sFormato.length)){
	case 'dd': dDia=sValor.substr(sValor.length-2, sValor.length)
		break
	case 'mm': dMes=sValor.substr(sValor.length-2, sValor.length)
		break
	case 'aa': dAno=sValor.substr(6, 4)
}
//--- Verifica se a data é valida

if ((Separador1==sFormato.substr(ComecaMes-1, 1)) && (Separador2==sFormato.substr(ComecaMes+2, 1))){
	if (dAno.length>=4){
	    if ((dAno % 100 == 0) && (dAno % 400 == 0) || (dAno % 4 == 0)){
	        dDiasdMeses[1]=29
	    }
	    if (dMes>=1 && dMes<=12 && dDia>=1){
			if (dDia<=dDiasdMeses[dMes-1]){ //tem de estar assim porque se o mês for >12 ultrapassa o array e dá erro

				Resultado=true
			} //Se Não ultrapassa os dDias do dMes.
	    } //se cumpre as condições
	} //se o ano está correcto
} //se os separadores estão correctos

} //tem de ter o tamanho = 10

return Resultado

} //function

//-----------------------------------------------------------------------------------------
//Funções seguintes utilizadas no fim do submit do formulario
//-----------------------------------------------------------------------------------------

function ValidarNormal(Campo, Nome){  //verifica se o campo está vazio
	if (Nome==''){
		Nome=Campo
	}
	if (eval('document.all.' + Campo + '.value')==''){
		return '\n' + Nome
	}
	else{
		return ''
	}
}

//--------------------------------------------------------------------------------------------

function ValidarEmail(Campo, Nome){  //verifica se o campo de E-MAIL está vazio
	if (Nome==''){
		Nome=Campo
	}
	if (emailCheck(eval('document.all.' + Campo + '.value'))==false){
		return '\n' + Nome
	}
	else{
		return ''
	}
}

//--------------------------------------------------------------------------------------------

function ValidarData(Campo, Nome, Formato, MostraFormato){  //verifica se o campo de DATA está vazio
	var Resultado
	var ValorCampo
	
	ValorCampo=eval('document.all.' + Campo + '.value')

	Resultado=''
	
	if (Nome==''){
		Nome=Campo
	}
	if ((ValorCampo!=MostraFormato) || (ValorCampo!='')){
		if (DataValida(eval('document.all.' + Campo + '.value'),Formato)==false){
			Resultado='\n' + Nome
		}
	}
	return Resultado
}

//-------------------------------------------------------------------------------------------

function ValidarMoedaSubmit(Campo, Nome, Separador)   //só aceita valores entre 0 e 9 com virgula
{
var valoraux, erro, caracter, i, NumSeparadores

erro=false //prevê que não dá erro
NSeparadores=1 //so pode ter um separador
valoraux=eval('document.all.' + Campo + '.value')

if (Nome==''){
	Nome=Campo
}
	
for (i=0; i<valoraux.length; i++) {
	caracter=valoraux.substr(i, 1)
	if (((caracter>=0) && (caracter<=9))==false){
		if (caracter==Separador){
			if (NSeparadores>1){
				erro=true
			}
			else{
				NSeparadores=NSeparadores+1
			} //else
		} //2ºif
		else{
			erro=true
			 //não é igual ao separador nem é numero
		}
	} //else do 1ºif
}//for

if (valoraux==''){
	erro=true
}

if (erro){
	return '\n' + Nome
}
else{
	return ''
}

}//function


//-----------------------------------------------------------------------------------------
//Funções seguintes utilizadas no formulario
//-----------------------------------------------------------------------------------------

function ValidarDataEdita(Campo, Formato, MostraFormato){  //se um campo DATA é falso mete-o a vazio
	if (DataValida(Campo.value, Formato)==false){
		Campo.value=MostraFormato
	}
}

//-------------------------------------------------------------------------------------------

function ValidarNumero(objecto)  //só aceita valores entre 0 e 9
{
  var
    lSample = new String('0123456789'),
    lTemp   = new String(event.srcElement.value);
    
    event.returnValue = (lSample.indexOf(String.fromCharCode(event.keyCode))!=-1);
}

//-------------------------------------------------------------------------------------------

function ValidarMoeda(objecto, Separador)   //só aceita valores entre 0 e 9 com virgula
{
  var
    lSample = new String('0123456789'+ Separador),
    lTemp   = new String(event.srcElement.value);
    
    event.returnValue = (lSample.indexOf(String.fromCharCode(event.keyCode))!=-1) && !((lTemp.indexOf(Separador)!=-1) && (String.fromCharCode(event.keyCode)==Separador));
}

//----------------------------------------------------------------------------------------

function ContarTexto(campo, max) {
	if (campo.value.length > max) // if too long...trim it!
		campo.value = campo.value.substring(0, max);
	// otherwise, update 'characters left' counter
	//else 
		//countfield.value = maxlimit - field.value.length;
}

//----------------------------------------------------------------------------------------

function ValidarMailSubmit(Campo, Nome){  //verifica se o campo de E-MAIL está vazio
	if (Nome==''){
		Nome=Campo
	}
	if (eval('document.all.' + Campo + '.value')==''){
		return ''   //considera-se valido porque esta função não é para validar camppos obrigatorios
	}
	
	if (emailCheck(eval('document.all.' + Campo + '.value'))==false){
		return '\n' + Nome
	}
	else{
		return ''
	}
}

