/***************************************************************
* 				classe CFormValidator
* elaborada por: 
*	Nuno Gonçalves 09-08-2006
*Descrição:
*Classe responsável pela validação de formulários...
*****************************************************************/
var GLOBAL_aElementDefaultColor=new Array();

if(CFormValidation==undefined)
	var CFormValidation={};//definindo espaço de nomes

CFormValidation=function(){
	this.m_strErrorMsgAlert			=	'';
	this.m_strErrorMsgHtml			=	'';
	this.m_strHeaderErrorMsgAlert	=	
'Ocorreram os seguintes erro(s)\n\nPor favor volte a inserir os dados depois de efectuar as devidas alterações: \n\n';
	this.m_strHeaderErrorMsgHtml	=	
'<b>Ocorreram os seguintes erro(s)</b><br /><br />Por favor volte a inserir os dados depois de efectuar as devidas alterações: <br /><br />';
	this.m_bHasError				=	false;
}

//atributos
CFormValidation.prototype.m_strErrorMsgAlert			=	'';
CFormValidation.prototype.m_strHeaderErrorMsgAlert		=	'';
CFormValidation.prototype.m_strHeaderErrorMsgHtml		=	'';
CFormValidation.prototype.m_strErrorMsgHtml				=	'';
CFormValidation.prototype.m_bHasError					=	false;
//CFormValidation.prototype.GLOBAL_aElementDefaultColor		=	new Array();
//metodos

//verifica se um determinado elemento é constituido apenas por letras SEM ESPAÇOS
CFormValidation.prototype.isAlpha=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;
		
	var myRegExp = /^[a-zA-ZáÁàÀâÂãÃéÉêÊíÍóÓúÚçÇñÑöÖëËïÏ]+$/;

	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//verifica se um determinado elemento é constituido apenas por letras COM ESPAÇOS
CFormValidation.prototype.isAlphaWithSpaces=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[a-zA-ZáÁàÀâÂãÃéÉêÊíÍóÓúÚçÇñÑöÖëËïÏ ]+$/;

	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//devolve o tamanho de uma string de um elemento
CFormValidation.prototype.getLength=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	return document.getElementById(elemid).value.length;
}

//verifica se um determinado elemento é constituido apenas por letras e números COM ESPAÇOS
CFormValidation.prototype.isAlphaNumericWithSpaces=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[0-9a-zA-ZáÁàÀâÂãÃéÉêÊíÍóÓúÚçÇñÑöÖëËïÏ ]+$/;

	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//verifica se um determinado elemento é um endereço válido
CFormValidation.prototype.isStreetAddress=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[0-9a-zA-ZáÁàÀâÂãÃéÉêÊíÍóÓúÚçÇñÑöÖëËïÏºª,;:\/\\\.\- ]+$/;
	
	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//valida um elemento com uma expressão regular fornecida como argumento
CFormValidation.prototype.isThisElementValid=function(elemid,regularexp){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;
		
	var myRegExp = new RegExp(regularexp);
	return myRegExp.test(document.getElementById(elemid).value);
}

//verifica se um determinado elemento é um e-mail válido
CFormValidation.prototype.isEmail=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	//var myRegExp = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	var myRegExp = /^[^\.]+[a-zA-Z0-9\-_\+\.]+[^\.]+@[^\.]+[a-zA-Z0-9\-_\.]+\.[a-zA-Z]{2,4}$/;
	var mySecRegExp = /\.\./;
	
	if((myRegExp.test(document.getElementById(elemid).value)) && (!mySecRegExp.test(document.getElementById(elemid).value)))
		return true;
	else
		return false;
}

//verifica se um determinado elemento é apenas constituido por numeros SEM ESPAÇOS
CFormValidation.prototype.isNumber=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[0-9]+$/;
	
	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//verifica se um determinado elemento é apenas constituido por numeros COM ESPAÇOS
CFormValidation.prototype.isNumberWithSpaces=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[0-9 ]+$/;
	
	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//verifica se um determinado elemento se encontra num determinado intervalo númerico
CFormValidation.prototype.isWithInRange=function(elemid,min,max){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	if(this.isNumber(elemid) && 
	(document.getElementById(elemid).value >= min && document.getElementById(elemid).value <= max))
		return true;
	else
		return false;
}

//verifica se um determinado elemento está vazio, devolve true se este estiver vazio
CFormValidation.prototype.isEmpty=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	var myRegExp = /^[ ]*$/;

	if(myRegExp.test(document.getElementById(elemid).value))
		return true;
	else
		return false;
}

//adiciona um erro aos atributos que armazenam os erros
CFormValidation.prototype.addError=function(errorname,errortxt){
	this.m_bHasError = true;
	
	this.m_strErrorMsgAlert  	= this.m_strErrorMsgAlert +	errorname + ': ' + errortxt + '\n';
	this.m_strErrorMsgHtml  	= this.m_strErrorMsgHtml + '<font color="#000000"><li><b>' + errorname +'</b>: <font color="#ff0000">'+ errortxt + '</font></li></font>';
}

//verifica se um determinado elemento EXISTE
CFormValidation.prototype.verificaExistenciaId=function(elemid){
	if(!document.getElementById(elemid)){
		alert(elemid + ' : ID não exite neste documento!');
		return false;
	}else
		return true;
}

//imprime determinado texto para um Elemento (Div, Span...) 
CFormValidation.prototype.printToElement=function(elemid,txt){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;
	
	document.getElementById(elemid).innerHTML = '' + txt + '';
}

//imprime TODOS os ERROS para um ÚNICO ALERT
CFormValidation.prototype.printAllErrorsToAlert=function(){
	if(this.m_bHasError){
		if(this.m_strHeaderErrorMsgAlert == ''){
			alert("Titulo de Mensagem Alerta não definido!");
			return;
		}
		alert(this.m_strHeaderErrorMsgAlert + this.m_strErrorMsgAlert);
		return false;
	}else{
		return true;
	}
}

//define o texto a apresentar no cabeçado da mensagem de erro
CFormValidation.prototype.setTituloErrorElementHtml=function(txt){
	this.m_strHeaderErrorMsgHtml=txt;
}

//imprime TODOS os ERROS para um ÚNICO DIV
CFormValidation.prototype.printAllErrorsToElement=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;
	
	if(this.m_bHasError){
		if(this.m_strHeaderErrorMsgHtml == ''){
			alert("Titulo de Mensagem de Elemento não definido!");
			return;
		}
		this.printToElement(elemid, this.m_strHeaderErrorMsgHtml + this.m_strErrorMsgHtml + '<br /><br />');
		return false;
	}else{
		return true;
	}
}

//verifica se o form é válido, se for, devolve true
CFormValidation.prototype.isValid=function(){
	return !this.m_bHasError;
}

//limpa os atributos que contêm as mensagens de erro
CFormValidation.prototype.cleanErrorMsg=function(){

	this.m_bHasError = false;

	this.m_strErrorMsgAlert = '';
	this.m_strErrorMsgHtml 	= '';
}

//altera a cor do texto dos elementos (Divs,Span,P...), por defito, se nenhuma cor for definida no parametro, é definido como VERMELHA
CFormValidation.prototype.changeElementColorText=function(elemid,color){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;
	
	if(!GLOBAL_aElementDefaultColor[elemid]){
		GLOBAL_aElementDefaultColor[elemid] = document.getElementById(elemid).style.color;
	}
	
	if(typeof(color) != 'undefined'){
		alert('COR DEFINIDA :'+color);
		document.getElementById(elemid).style.color = color;
	}else{
		document.getElementById(elemid).style.color = '#ff0000';
	}
}

//restaura a cor inicial do texto dos elementos (Divs,Span,P...), por defito, se nenhuma cor for definida no parametro, é definido como VERMELHA
CFormValidation.prototype.restoreElementColorText=function(elemid){
	//verifica se existe esse elemento, se não existir apresenta um alert e sai do método
	if(!this.verificaExistenciaId(elemid))
		return false;

	if(typeof(GLOBAL_aElementDefaultColor[elemid]) != 'undefined'){
		document.getElementById(elemid).style.color = GLOBAL_aElementDefaultColor[elemid];
	}
}

/*
CFormValidation.prototype.nomedafuncao=function(elemid){
}

EXEMPLO
---------------------------------------------------------------------
function validaForm(){
	var errortxt,errorname;
	var obj=new CFormValidation();
	
	//limpar divs
//	obj.printToElement('erronome','');
//	obj.printToElement('erroemail','');
//	obj.printToElement('errotelefone','');
	
	obj.restoreElementColorText('idlnome');
	obj.restoreElementColorText('idlemail');
	obj.restoreElementColorText('idltelefone');
	obj.restoreElementColorText('idlendereco');
	obj.restoreElementColorText('idllocalidade');
	obj.restoreElementColorText('idlpais');

	
	//alert('Tamanho Nome: '+obj.getLength('idnome'));
	
obj.setTituloErrorElementHtml('<?php echo $txt_site[145];?>');

	if(obj.isEmpty('idnome') || !obj.isAlphaWithSpaces('idnome') || obj.getLength('idnome')<3){
		errorname	='<?php echo $txt_site[137];?>';
		errortxt	='<?php echo $txt_site[144];?>';
		obj.addError(errorname,errortxt);
		//obj.printToElement('erronome','<font color="#ff0000">*</font>');
		obj.changeElementColorText('idlnome');
	}
	if(!obj.isEmail('idemail')){
		errorname	='<?php echo $txt_site[138];?>';
		errortxt	='<?php echo $txt_site[144];?>';
		obj.addError(errorname,errortxt);
		//obj.printToElement('erroemail','<font color="#ff0000">*</font>');
		obj.changeElementColorText('idlemail');
	}
	if(!obj.isEmpty('idtelefone'))
		if(!obj.isThisElementValid('idtelefone','[0-9\- \(\)\+]{9,17}')){
			errorname	='<?php echo $txt_site[139];?>';
			errortxt	='<?php echo$txt_site[144];?> (0-9()+-)';
			obj.addError(errorname,errortxt);
			//obj.printToElement('errotelefone','<font color="#ff0000">*</font>');
			obj.changeElementColorText('idltelefone');
		}
	
	if(obj.isEmpty('idendereco') || obj.getLength('idendereco')<8 ){
		errorname	='Endereço<?php echo '';?>';
		errortxt	='Rua/Bairro/Nº porta<?php echo '';?>';
		obj.addError(errorname,errortxt);
		obj.changeElementColorText('idlendereco');
	}
	
	if(obj.isEmpty('idlocalidade') || obj.getLength('idlocalidade')<3 ){
		errorname	='Localidade<?php echo '';?>';
		errortxt	='<?php echo$txt_site[144];?>';
		obj.addError(errorname,errortxt);
		obj.changeElementColorText('idllocalidade');
	}

	if(obj.isEmpty('idpais')){
		errorname	='País<?php echo '';?>';
		errortxt	='<?php echo$txt_site[144];?> Escolha um país.';
		obj.addError(errorname,errortxt);
		obj.changeElementColorText('idlpais');
	}
	obj.printAllErrorsToElement('idtodos_erros');
	//alert de erros no form
	//obj.printAllErrorsToAlert();
	return obj.isValid();
}
*/
/***************************************************************
* 				classe CFormValidator
*****************************************************************/