/**
 * Activa ou desactiva todos os botoes de submit
 * @author Marco Pereira
 * @version 1.0 2010/09/03
 *
 * @param estado (Bool) Estado que os botões vão ficar
 *
 * @return NULL
 */
function forms_estadoSubmit(estado){
	if(estado!=true){
		estado=true;
	} else {
		estado=false;
	}

	var inputs=document.getElementsByTagName('input');
	for(var i=0;i<inputs.length;i++){
		if(inputs[i].type=='submit' || inputs[i].type=='image'){
			
			if(inputs[i].id!=""){
				if(document.getElementById(inputs[i].id).estadoActivado){
					document.getElementById(inputs[i].id).disabled=estado;
				}
			}
			
		}
	}
	var botoes=document.getElementsByTagName('button');
	for(i=0;i<botoes.length;i++){
		if(document.getElementById(inputs[i].id).estadoActivado){
			document.getElementById(botoes[i].id).disabled=estado;
		}
	}
}

/**
 * Activa o modo de processamento. Ao efectuar esta operação vai desactivar os botoes
 * do formulário de forma a não se poder enviar enquanto está neste modo
 * @author Marco Pereira
 * @version 1.0 2010/09/03
 *
 * @param objecto (String) ID do objecto
 *
 * @return NULL
 */
function forms_uploadProcessamento(objecto){
	parent.document.getElementById(objecto).value="";
	parent.document.getElementById(objecto).processamento=true;
	parent.forms_estadoSubmit(false);
	document.getElementById(objecto + "_form").submit();
	document.getElementById(objecto + "_div").style.display="none";
	document.getElementById(objecto + "_img").style.display="block";
}

/**
 * Passa o nome do ficheiro e nome temporário para os respectivos inputs no formulario.
 * Desactiva o modo de processamento e reactiva novamente os botoes do formulário
 * caso nenhum dos botoes de ficheiro esteja em modo de processamento.
 * @author Marco Pereira
 * @version 1.0 2010/09/03
 *
 * @param objecto (String) ID do objecto
 * @param resultado
 * @param nome_temporario
 *
 * @return NULL
 */
function forms_uploadTerminado(objecto,resultado,nome_temporario){
	parent.document.getElementById(objecto).value=resultado;
	parent.document.getElementById(objecto).processamento=false;
	parent.document.getElementById(objecto + "_temp").value=nome_temporario;
	parent.document.getElementById(objecto + "_ficheiro").innerHTML=resultado;
	parent.document.getElementById(objecto + "_eliminar").style.display="block";

	var inputs=parent.document.getElementsByTagName("input");
	var processamento=false;
	for(var i=0; i<inputs.length; i++){
		if(inputs[i].processamento==true){
			processamento=true;
		}
	}

	if(processamento!=true){
		parent.forms_estadoSubmit(true);
	}
}

/**
 * Limpa os valores dos campos de ficheiro e esconde o icon de eliminar
 * @author Marco Pereira
 * @version 1.0 2010/09/03
 * @param objecto
 */
function forms_uploadEliminarFicheiro(objecto){
	document.getElementById(objecto + "_temp").value="";
	document.getElementById(objecto).value="";
	document.getElementById(objecto + "_ficheiro").innerHTML=TXT_FORMS_NENHUM_FICHEIRO_SELECCIONADO;
	document.getElementById(objecto + "_eliminar").style.display="none";
}

/*******************************************************************************
 ANALISAR DAQUI PARA BAIXO
*******************************************************************************/

var alerta=false;
var focar=true;

/**
 * @name frmCompararInput
 * @description Função que mostra uma mensagem de erro caso o campo a testar não cumpra com as condições
 * @param div ID do div que vai ser usado para levar a mensagem
 * @param input ID do campo a testar
 * @param metodo igual, diferente, maior, menor, entre, fora, email
 * @param tipo_valor string, inteiro, decimal
 * @param valor1 valor de teste. Caso o objecto seja true, entao vai comparar com o valor de um determinado objecto
 * @param valor2 valor de comparação 
 * @param objecto true/false
 * @param permitir_campo_vazio true/false
 * @param mensagem_erro Mensagem de texto com o erro
 */
function frmCompararInput(div,input,metodo,tipo_valor,valor1,valor2,objecto,permitir_campo_vazio,mensagem_erro){
	//Verificar se pode conter um campo vazio
	if(permitir_campo_vazio=="" || permitir_campo_vazio=="undefined"){
		permitir_campo_vazio=false;
	} else {
		permitir_campo_vazio=true;
	}
	//Verificar se o valor de objecto está preenchido para substituir o valor2 pelo valor do campo do objecto
	if(objecto==1){
		valor1=document.getElementById(valor1).value;

		if(valor2!="" && valor2!="undefined"){
			valor2=document.getElementById(valor2).value;
		}
	}

	//Detectar que tipo de valor é que se pretende comparar
	if(tipo_valor=="inteiro"){
		valor1=parseInt(valor1);
		valor2=parseInt(valor2);
	} else if(tipo_valor=="decimal"){
		valor1=parseFloat(valor1);
		valor2=parseFloat(valor2);
	}
	var ignorar=false;
	if(permitir_campo_vazio==true && document.getElementById(input).value.length==0){
		ignorar=true;
	} else {
		ignorar=false;
	}
	
	if(metodo=="igual"){
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			//alert("é numerico");
			if(document.getElementById(input).value==valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
			//alert("é string");
			//Caso esteja a comparar o nr de caracteres
			if(document.getElementById(input).value==valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="diferente"){
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			if(document.getElementById(input).value!=valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
		//Caso esteja a comparar o nr de caracteres
			if(document.getElementById(input).value.length!=valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="maior") {
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			if(document.getElementById(input).value>valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
		//Caso esteja a comparar o nr de caracteres
			if(document.getElementById(input).value.length>valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="menor") {
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			if(document.getElementById(input).value<valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
		//Caso esteja a comparar o nr de caracteres
			if(document.getElementById(input).value.length<valor1 || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="entre") {
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			if((document.getElementById(input).value>=valor1 && document.getElementById(input).value<=valor2) || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
		//Caso esteja a comparar o nr de caracteres
			if((document.getElementById(input).value.length>=valor1 && document.getElementById(input).value.length<=valor2) || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="fora") {
		//Caso esteja a comparar os valores numericos
		if(tipo_valor!="string"){
			if((document.getElementById(input).value<valor1 && document.getElementById(input).value>valor2) || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		} else {
		//Caso esteja a comparar o nr de caracteres
			if((document.getElementById(input).value.length<valor1 && document.getElementById(input).value.length>valor2) || ignorar==true){
				document.getElementById(div + "_validacao").erro=false;
				document.getElementById(div + "_validacao").innerHTML="";
				document.getElementById(div + "_validacao").style.display="none";
			} else {
				document.getElementById(div + "_validacao").erro=true;
				document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
				document.getElementById(div + "_validacao").style.display="block";
			}
		}
	} else if(metodo=="email"){
		var regex = new RegExp(/^(?!(\.))[a-zA-Z0-9\.\_\+\-]{1,64}@([a-zA-Z\-]+?\.([a-zA-Z]{2,4}(\.[a-zA-Z]{1,4})?|museum)|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
		if(!document.getElementById(input).value.match(regex) && ignorar==false){
			document.getElementById(div + "_validacao").erro=true;
			document.getElementById(div + "_validacao").innerHTML=mensagem_erro;
			document.getElementById(div + "_validacao").style.display="block";
		} else {
			document.getElementById(div + "_validacao").erro=false;
			document.getElementById(div + "_validacao").innerHTML="";
			document.getElementById(div + "_validacao").style.display="none";
		}
	}
}

function frmFiltroInput(campo,filtro,regexPersonalizado){
	objecto=document.getElementById(campo);
	var regex;
	switch(filtro){
        case 'letras':{
			regex = new RegExp(/[^a-zA-Z\s]/gm);
            break;
        }

		case 'numeros':{
			regex = new RegExp(/[^0-9\s]/gm);
			break;
		}

		case 'telefone':{
			regex = new RegExp(/[^0-9\#\+\*\s]/gm);
			break;
		}

		case 'email':{
			regex = new RegExp(/[^a-zA-Z0-9\_\-\@\.\+]/g);
			break;
		}

		case 'nickname':{
			regex = new RegExp(/[^0-9a-zA-Z_\-]/g);
			break;
		}

		case 'personalizado':{
			regex = new RegExp(regexPersonalizado);
			break;
		}
	}
	objecto.value=objecto.value.replace(regex,"");
}

function frmValidarFormulario(formulario){
	if(typeof(formulario)!="object"){
		formulario=document.getElementById(formulario);
	}
	var objectos = formulario.getElementsByTagName('input');
	var mensagens = formulario.getElementsByTagName('div')
	var resultado=true;

	for(var i=0;i<mensagens.length;i++){
		if(mensagens[i].erro==true){
			resultado=false;
		}
	}

	for(i=0;i<objectos.length;i++){
		if(resultado==false){
			if(objectos[i].type=="submit" || objectos[i].type=="image"){
				if(objectos[i].estado_in){
					sistema_mudarEstadoBotao(objectos[i].id,"desactivado");
				}
				objectos[i].disabled=true;
			}
		} else {
			if(objectos[i].type=="submit" || objectos[i].type=="image"){
				objectos[i].disabled=false;
				sistema_mudarEstadoBotao(objectos[i].id,"reactivado");
			}
		}
	}

	return(resultado);
}

function frmValidarIcon(objecto){
	if(typeof(objecto)!="object"){
		objecto=document.getElementById(objecto);
	}
	
	if(objecto.erro==true){
		document.getElementById(objecto.id + "_icon").className="validacao_icon_erro";
	} else {
		document.getElementById(objecto.id + "_icon").className="validacao_icon_sucesso";
	}
}

function frmInicializarFormulario(formulario,focusInput){
	if(typeof(formulario)!="object"){
		formulario=document.getElementById(formulario);
	}
	var objectos = formulario.getElementsByTagName('input');

	for(var i=0;i<objectos.length;i++){
		if(objectos[i].type!="hidden"){
			objectos[i].focus();
		}
	}

	if(focusInput && focusInput!=""){
		if(document.getElementById(focusInput)){
			document.getElementById(focusInput).focus();
		}
	} else {
		objectos[0].focus();
	}
	
	frmValidarFormulario(formulario.id);
	
	
	
}
