/* +++++++ CREDITOS & COPYRIGHT +++++++ 

   Funções de Javascript para controlar o Front-End do portal Notícias de Vila Real [www.noticiasdevilareal.com]
   Criadas e adaptadas por alvaro Saraiva @ glups.pt @ maio 2006
   
   Glups - Atelier de Novas Tecnologias, Lda
   Rua Jaime Campos, Bloco D, Piso 3 Esq., 5000-431 Vila Real | Portugal
   Tel. [351] 259 322 183 | E-mail: info@glups.pt | URL: www.glups.pt

   Se utilizarem estas funções para os vossos trabalhos,
   a Glups agradece que ao menos no retirem estas linhas de cdigo,
   por respeito e agradecimento ao trabalho das pessoas que a criaram
   e ao trabalho que vocs pouparam. Keep Cool. Peace ;)

*/
//+++++++++++++++++++++++++++++++++++++++++++++++
//+++++++ DECLARAÇÃO DE VARIÁVEIS GERAIS ++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++

//Controlo das classes de css dos campos dos Formulários
var cssFormInputErro='inputErro'; //Controla a class de CSS que é aplicada ao um campo do formulario qd dá erro no preenchimento
var cssFormInputFocus='inputOver'; //Controla a class de CSS que é aplicada ao um campo do formulario qd recebe focus no preenchimento
var cssFormInput='inputOut'; //Controla a class de CSS que é aplicada normalmente um campo do formulario

//Formatos de ficheiros permitidos nos inputs dos formulários
var formatosImagem=new Array('jpg','gif','png');
var formatosAnexos=new Array('doc','xls','pdf','pps','zip','rar');
var formatosSom=new Array('mp3');

//+++++++ NÃO MEXER DAKI PARA BAIXO ++++++++

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++ FUNÇÕES PARA CONTROLAR A APRESENTAÇÃO DAS PÁGINAS, NAVEGAÇÃO, ETC ++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//Função para saber o ano actual e apresentar no rodapé
function anoActual(){
	var tempo = new Date();
	var ano=tempo.getFullYear();
	return ano;
}

// função para um campo ganhar focus numa paágina
function ganharFocus(obj){
	document.getElementById(obj).focus();
}

// funcao para fazer o login dos utilizadores no menu do lado Dto
function loginUtilizadores(){
	if (verificarCampos('alert','inputUtilizador','R','Utilizador','inputSenha','R','Senha')){
		document.loginUtilizador.submit();
	}
	return false;
} 

function pesquisarTopo(){
	if (verificarCampos('alert','gwf_pesquisa','R','Palavra')){
		var palavra = document.getElementById('gwf_pesquisa').value;
		document.pesquisaTopo.action += '&gwf_pesquisa='+ palavra;
		document.pesquisaTopo.submit();
	}
	return false;
} 

// funcao para submeter os formulários das votacoes */
function votar(obj){
	var i=0;
	var votacao=false;
	while(i<obj.voto_id.length && votacao==false){
		if (obj.voto_id[i].checked)
			votacao=true;
	i++;
	}
	if(votacao){
		obj.submit();
	}
	else{
	alert("Tem que escolher pelo menos uma opção para votar!"); 
	}
}

// função para activar o radioButton de uma opção de votacao, a aprtir do tr */
function activarOpcaoVoto(obj,opcao){
	//alert(obj.voto_id[opcao].checked);
	var objRadio = obj.voto_id[opcao];
	objRadio.checked = (objRadio.checked) ? false : true ;
}

// função para adicionar o site aos favoritos
function adFavoritos(){
	var URLSite = 'http://www.noticiasdevilareal.com.com';
	var tituloSite = "Notícias de Vila Real";
	if (document.all) {
		window.external.AddFavorite(URLSite,tituloSite);
	}
}

//Função para verificar a eliminação de um registo
function confirmaEliminar(chk,nomeRegisto,tipo,estado){
	if (chk.checked){
		switch(estado){
			case 'eliminar':
			if (!confirm('Tem a certeza de que deseja eliminar '+tipo+' com a referencia "'+ nomeRegisto +'"?' )){
				chk.checked=false;
			}
			break;
			case 'enviar':
			if (!confirm('Tem a certeza de que deseja enviar '+tipo+' com a referencia "'+ nomeRegisto +'"?' )){
				chk.checked=false;
			}
			break;
		}
	}
}

//Função para abrir as janelas
function abrirJanela(URL,nomeJanela,propriedades) { 
	window.open(URL,nomeJanela,propriedades);
	//window.moveBy(50,50);
}


/**
 /* @desc			Função que serve de handler para fechar todos os divs duma página, qd ela arranca, e usa o mostraDiv pra tratar do assunto
 /* @param Array	objArray: array com os id's dos objectos para fechar. Vem em grupos de 3, em k cada grupo traz:
 						- id do div para controlar;
						- o div de texto ou img;
						- a acção inicial qd a pagina abre. abrir ou fechar
 /* @return Void
*/
function fechaDivs(objArray){
	for(var i=0; i < objArray.length; i+=3){
		var obj = document.getElementById(objArray[i]);
		var objTxt = document.getElementById(objArray[i+1]);
		var action = objArray[i+2];
		//alert(obj.id + ' - ' + action);
		if(obj != undefined){
			switch(action){
				case 'fechar':
					obj.aberto = true;
				break;
				case 'abrir':
					obj.aberto = false;
				break;
				default:
					obj.aberto = true;
				break;
			}
			if(objTxt!=undefined){		slideDiv(obj.id,objTxt.id);	}
			else{								slideDiv(obj.id,'');				}
		}
	}
}

/**
 /* @desc			Função que serve de handler todas as funções que queiram alterar a visibilidade de divs com slides
 /* @param string	objNome: nome do objecto para 'slidar' ;)
 /* @param string	objNome: nome do da imagem para alterar ;)
 /* @return Void
*/
function slideDiv(objNome,btnImg){
	//alert(arguments.length);
	var obj = document.getElementById(objNome);
	var btn = document.getElementById(btnImg);
	//alert(obj.id);
	//var caminhoImgs = (btn != undefined) ? btn.src.substring(0,btn.src.lastIndexOf('/')+1) : null ;
	obj.aberto = (obj.aberto == undefined || obj.aberto == true) ? true : false ;
	if(!obj.aberto){		
		Effect.SlideDown(obj, {duration:.30});
		if(btn != undefined){
			//alert(btn.src + '\n' + caminhoImgs);
			switch(btn.id){
				case 'txt_detalhes_ficha_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Detalhes da Ficha de Utilizador';
				break;
				case 'txt_vantagens_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Vantagens de ser Utilizador Registado';
				break;
				case 'txt_login_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Login de Assinantes/Clientes';
				break;
				case 'txt_recupera_dados':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Recuperar Dados de Acesso';
				break;
				case 'txt_solicita_dados':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Solicitar Dados de Acesso';
				break;
				case 'txt_assinaturas_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Assinaturas do Jornal';
				break;
				case 'txt_dados_logs':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Dados do seu acesso à Área de Utilizadores';
				break;
				case 'txt_dados_pessoais':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Dados Pessoais';
				break;
				case 'txt_dados_facturacao':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Dados para facturação';
				break;
				case 'txt_dados_pagamento':
					btn.innerHTML = '<span class="div_icone_sinal">[ &minus; ]</span>&nbsp;&nbsp;Método de Pagamento';
				break;
				default:
				
				break;
			}
		}	
	}
	else{						
		Effect.SlideUp(obj,{duration:.28});			
		if(btn != undefined){
			switch(btn.id){
				case 'txt_detalhes_ficha_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Detalhes da Ficha de Utilizador';
				break;
				case 'txt_vantagens_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Vantagens de ser Utilizador Registado';
				break;
				case 'txt_login_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Login de Assinantes/Clientes';
				break;
				case 'txt_recupera_dados':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Recuperar Dados de Acesso';
				break;
				case 'txt_solicita_dados':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Solicitar Dados de Acesso';
				break;
				case 'txt_assinaturas_user':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Assinaturas do Jornal';
				break;
				case 'txt_dados_logs':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Dados do seu acesso à Área de Utilizadores';
				break;
				case 'txt_dados_pessoais':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Dados Pessoais';
				break;
				case 'txt_dados_facturacao':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Dados para facturação';
				break;
				case 'txt_dados_pagamento':
					btn.innerHTML = '<span class="div_icone_sinal">[ + ]</span>&nbsp;&nbsp;Método de Pagamento';
				break;
				default:
				
				break;
			}
		}
	}
	obj.aberto = !obj.aberto;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++ FUNÇÕES PARA VERIFICAR A ENTRADA DE INFORMAÇÃO (TEXTOS, IMAGENS E ANEXOS NO BACK-OFFICE ++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//Função para verificar o formato do campo da data
function verificaData(campo){
	var data=campo;
	dataElementos=new Array(data.substring(0,2),data.substring(3,5),data.substring(6,10)); //Extrair os valores do dia, mês e ano
	dataSeparador=new Array(data.substring(2,3),data.substring(5,6)); //Extrair os separadores para um array
	var verificacaoData=document.verificacaoData=false;
	var msgData=document.msgData=-1; //Esta vai ser a msg personalizada k vai ser devolvida (no caso de ser necessário) com o erro de preenchimento dos campos
	var separadorCorrecto='-';
	var primeiroSeparador=dataSeparador[0];
	var segundoSeparador=dataSeparador[1];
	var dia=parseFloat(dataElementos[0]);
	var mes=parseFloat(dataElementos[1]);
	var ano=parseFloat(dataElementos[2]);
	var anoBissexto=ano%4;
	
	if((primeiroSeparador==separadorCorrecto)&&(segundoSeparador==separadorCorrecto)){ //Se os separadores estão correctos
		if ((!isNaN(dia))&&(!isNaN(mes))&&(!isNaN(ano))){ //Se os valores inseridos são números
			if (((dia>=1)&&(dia<=31))&&((mes>=1)&&(mes<=12))&&((ano>=1700)&&(ano<=9999))){ //Verifico se o dia está entre 1 e 31, se o mês está entre 1 e 12 e se o ano está entre 2000 e 2050
				//Começa aki o controlo EXTRA dos dias e meses
				if(((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12))&&(dia<=31)){ // Verifico que estes meses só podem ter 31 dias
					document.verificacaoData=true;
				}
				else if(((mes==4)||(mes==6)||(mes==9)||(mes==11))&&(dia<=30)){ //Verifico que estes meses só podem ter 30 dias
					document.verificacaoData=true;
				}
				else if(((mes==2)&&(anoBissexto==0))&&(dia<=29)){ //Verifico que em fevereiro dos anos bissextos só pode ter 29 dias
					document.verificacaoData=true;
				}
				else if(((mes==2)&&(anoBissexto!=0))&&(dia<=28)){ //Verifico que em fevereiro anos normais (não bissextos) só pode ter 28 dias
					document.verificacaoData=true;
				}
				else{
					document.verificacaoData=false;
					document.msgData='o mês "'+mes+'" no ano de "'+ano+'" não pode ter "'+dia+'" dias. Corrija os valores por favor!';
				} //fim do controlo EXTRA
			}
			else { document.verificacaoData=false; };
		}
		else { document.verificacaoData=false; }
	} //Fim de verificação dos campos
	else {document.verificacaoData=false; }
	if (document.verificacaoData){ 
		return document.msgData;
		return document.verificacaoData;
	}
}

//Função 1 (de 2) de verificação do preenchimento dos campos dos formulários
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

//Função 2 (de 2) de verificação do preenchimento dos campos dos formulários
function verificarCampos() { //v5.0
	var i,p,q,nomeCampo,tipoVerificacao,num,min,max,msgErro='',argumentos=verificarCampos.arguments;
	msgAlerta=verificarCampos.arguments[0]; //Serve para verificar se a verificação vai ter 'alerts' ou n. É o primeiro parâmetro da função
	for (i=1; i<(argumentos.length-1); i+=3) {
		campo=MM_findObj(argumentos[i]); //Campo para verificar o preenchimento
		tipoVerificacao=argumentos[i+1]; //parametro onde se indica qual o tipo de verificação a efectuar
		nomeCampoListagem=argumentos[i+2]; //parametro onde se indica qual o o nome do campo para aparecer nas listagens de erros
		
		if (campo) {
			nomeCampo=campo.id;
			if ((campo=campo.value)!="") { //Caso o campo tenha informação é obrigatório verificar o tipo de informação
				if(tipoVerificacao.indexOf('isData')!=-1){ //Caso seja obrigatório inserir uma data
					verificaData(campo); //Verifica de a data foi bem inserida e devolve o valor da variável verificacaoData
					/*if(document.verificacaoData){ //Se estiver tudo ok devolve true
						inverterData(nomeCampo,campo); //Inverto o formato da data para o script inserir na BD
					}*/
					if ((document.verificacaoData==false)&&(document.msgData!=-1)) { //Se houver problemas com os dias, meses e anos
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- No campo "'+nomeCampoListagem+'", '+document.msgData+'\n';
					}
					else if ((document.verificacaoData==false)&&(document.msgData==-1)){ //Se houver problemas de caracteres ou formatos inválidos
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- O campo "'+nomeCampoListagem+'" não tem um formato de data válido (dd-mm-aaaa).\n';
					}
				}// fim de verificacao de data
				if (tipoVerificacao.indexOf('isEmail')!=-1) { //Caso seja obrigatório um endereço de e-mail
					p=campo.indexOf('@');
					if (p<1 || p==(campo.length-1)) {
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- O campo "'+nomeCampoListagem+'" não tem um endereço de e-mail válido.\n';
					}
		  		}
				if (tipoVerificacao.indexOf('isNum')!=-1){ //Caso seja obrigatório um número
					if (isNaN(campo)) { 
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- O campo "'+nomeCampoListagem+'" deve conter um número.\n';
					}
				}
				if (tipoVerificacao.indexOf('inRange')!=-1){ //Caso seja obrigatório um número entre x e y. Ex. de sintax verificarCampos('quantidade_campos','NinRange1:4');
					num = parseFloat(campo.length);
					p=tipoVerificacao.indexOf(':');
					min=tipoVerificacao.substring(7,p);
					max=tipoVerificacao.substring(p+1);
					if (num<min || max<num) {
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- O campo "'+nomeCampoListagem+'" deve conter um número entre "'+min+'" e "'+max+'".\n';
					}
				}
				if (tipoVerificacao.indexOf('isContacto')!=-1){ //Caso seja obrigatório um número de telefone ou fax
					regraValidacaoContacto=/[^0-9+ ]/g;//Expressão regular que vai controlar a entrada no campo a todos os caracteres k n sejam de '1' a '9', '+' e ' '
				  	if(campo.search(regraValidacaoContacto)!=-1){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro+='- O campo "'+nomeCampoListagem+'" deve conter um número de contacto válido.\n';
					}
				}
				if(tipoVerificacao.indexOf('isURL')!=-1){ // Caso seja obrigatório um URL
					campoLowerCase=campo.toLowerCase();
					enderecoURL=campoLowerCase.substring(0,7);
					if (enderecoURL.indexOf('http:\/\/')==-1){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" tem que começar com "http://".\n';
					}
				}
				if(tipoVerificacao.indexOf('checkCombo')!=-1){ // Caso seja obrigatório o preenchimento de uma comboBox
					separador=tipoVerificacao.indexOf(':')+1;
					var valorProibido=tipoVerificacao.substring(separador,tipoVerificacao.length);
					if(campo==valorProibido){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- Tem que escolher uma das opções no campo "'+nomeCampoListagem+'".\n';
					}
				}
				if(tipoVerificacao.indexOf('isImage')!=-1){ // Caso seja obrigatório verificar o tipo de imagem
					var verificacaoImagem=false;
					comprimentoCampo=campo.length;
					extensaoFicheiro=campo.substring(comprimentoCampo-3,comprimentoCampo);
					extensaoFicheiro=extensaoFicheiro.toLowerCase();
					for(j=0;j<formatosImagem.length;j++){
						if(extensaoFicheiro==formatosImagem[j]){
							verificacaoImagem=true;
						}
					}
					if(verificacaoImagem==false){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não tem um formato de imagem válido ('+formatosImagem.toString()+').\n';
					}
				}
				if(tipoVerificacao.indexOf('isJpg')!=-1){ // Caso seja obrigatório verificar o tipo de ficheiro ser uma imagem JPG
					var verificacaoFicheiro=false;
					comprimentoCampo=campo.length;
					extensaoFicheiro=campo.substring(comprimentoCampo-3,comprimentoCampo);
					extensaoFicheiro=extensaoFicheiro.toLowerCase();
					if(extensaoFicheiro=='jpg'){
						verificacaoFicheiro=true;
					}
					else {
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não tem uma imagem no formato JPG.\n';
					}
				}
				if(tipoVerificacao.indexOf('isFile')!=-1){ // Caso seja obrigatório verificar o tipo de ficheiro anexo
					var verificacaoFicheiro=false;
					comprimentoCampo=campo.length;
					extensaoFicheiro=campo.substring(comprimentoCampo-3,comprimentoCampo);
					extensaoFicheiro=extensaoFicheiro.toLowerCase();
					for(k=0;k<formatosAnexos.length;k++){
						if(extensaoFicheiro==formatosAnexos[k]){
							verificacaoFicheiro=true;
						}
					}
					if(verificacaoFicheiro==false){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não tem um formato de ficheiro válido ('+formatosAnexos.toString()+').\n';
					}
				}
				if(tipoVerificacao.indexOf('isSom')!=-1){ // Caso seja obrigatório verificar o tipo de ficheiro anexo
					var verificacaoFicheiro=false;
					comprimentoCampo=campo.length;
					extensaoFicheiro=campo.substring(comprimentoCampo-3,comprimentoCampo);
					extensaoFicheiro=extensaoFicheiro.toLowerCase();
					for(m=0;m<formatosSom.length;m++){
						if(extensaoFicheiro==formatosSom[m]){
							verificacaoFicheiro=true;
						}
					}
					if(verificacaoFicheiro==false){
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não tem um formato de ficheiro válido ('+formatosSom.toString()+').\n';
					}
				}
				if(tipoVerificacao.indexOf('isTxt')!=-1){ // Caso seja obrigatório verificar o tipo de ficheiro anexo para a importação de dados
					var verificacaoFicheiro=false;
					comprimentoCampo=campo.length;
					extensaoFicheiro=campo.substring(comprimentoCampo-3,comprimentoCampo);
					extensaoFicheiro=extensaoFicheiro.toLowerCase();
					if(extensaoFicheiro=='txt'){
						verificacaoFicheiro=true;
					}
					else {
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não tem um formato de ficheiro válido (txt).\n';
					}
				}
				if(tipoVerificacao.indexOf('noSpaces')!=-1){ // Caso o campo não possa conter espaços
					regraValidacao=/[^A-Za-z0-9_]/g;//Expressão regular que vai controlar a entrada no campo a todos os caracteres k n sejam de 'A' a 'Z', de 'a' a 'z', de '1' a '9' e '_'
					  if(campo.search(regraValidacao)!=-1){
						novoValorCampo=campo.replace(regraValidacao,'_');
						document.getElementById(nomeCampo).value=novoValorCampo;
						document.getElementById(nomeCampo).className=cssFormInputErro;
						msgErro += '- O campo "'+nomeCampoListagem+'" não pode conter espaços entre os caracteres nem caracteres acentuados.\n   Por conveniência o valor "'+campo+'" inserido, foi alterado para "'+novoValorCampo+'".\n';
					}
				}
				if(tipoVerificacao.indexOf('isPrice')!=-1){ // Caso seja obrigatório verificar se é um preço
					var precoTotal=campo;
					var precoDecimas=precoTotal.substring(precoTotal.lastIndexOf(',')+1,precoTotal.length);
					var precoEuros=precoTotal.substring(0,precoTotal.lastIndexOf(','));
					if(precoTotal.indexOf(',')==-1){
						msgErro += '- O campo do preço "'+nomeCampoListagem+'" não está no formato correcto! Insira duas casas decimais. Ex.: 12,50\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
					}
					else if((precoTotal.indexOf(',')!=1) && (isNaN(precoEuros) || isNaN(precoDecimas))){
						msgErro += '- O campo do preço "'+nomeCampoListagem+'" só pode conter números e uma vírgula para separar as casas decimais!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;  
						}
					else if(precoDecimas.length!=2){
						msgErro += '- O campo do preço "'+nomeCampoListagem+'" deve ter duas casas decimais!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
					}
				}
				if(tipoVerificacao.indexOf('isPeso')!=-1){ // Caso seja obrigatório verificar se é um peso em Kg's
					var pesoTotal=campo;
					var pesoDecimas=pesoTotal.substring(pesoTotal.lastIndexOf(',')+1,pesoTotal.length);
					var pesoKilos=pesoTotal.substring(0,pesoTotal.lastIndexOf(','));
					if(pesoTotal.indexOf(',')==-1){
						msgErro += '- O campo do peso "'+nomeCampoListagem+'" não está no formato correcto! Insira 3 casas decimais. Ex.: 0,215\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
					}
					else if((pesoTotal.indexOf(',')!=1) && (isNaN(pesoKilos) || isNaN(pesoDecimas))){
						msgErro += '- O campo do peso "'+nomeCampoListagem+'" só pode conter números e uma vírgula para separar as casas decimais!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;  
						}
					else if(pesoDecimas.length!=3){
						msgErro += '- O campo do peso "'+nomeCampoListagem+'" deve ter 3 casas decimais!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
					}
				}				
				if(tipoVerificacao.indexOf('isEqual')!=-1){ // Caso seja obrigatório verificar se dois campos têm o mesmo valor
					var segundoValor =campo;
					separador = tipoVerificacao.indexOf(':')+1;
					separador2 = tipoVerificacao.indexOf('|')+1;
					var nomeCampo2=tipoVerificacao.substring(separador,separador2-1);
					var nomeCampoListagem2 = tipoVerificacao.substring(separador2,tipoVerificacao.length);
					var primeiroValor=document.getElementById(nomeCampo2).value;
					if(primeiroValor!=segundoValor){
						msgErro += '- Os campos "'+ nomeCampoListagem +'" e "'+ nomeCampoListagem2 +'" não são iguais. Corrija por favor!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
						document.getElementById(nomeCampo2).className=cssFormInputErro;
					}
				}
				if(tipoVerificacao.indexOf('isBiggerThan')!=-1){ // Caso seja obrigatório verificar se um campo tem mais do que 'x' caracteres
					separador=tipoVerificacao.indexOf(':')+1;
					var valorCampo=campo.length;
					var limite=parseFloat(tipoVerificacao.substring(separador,tipoVerificacao.length));
					if(valorCampo < limite){
						msgErro += '- O campo "'+ nomeCampoListagem +'" tem que ter no mínimo "'+ limite +'" caracteres. Corrija por favor!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
					}
				}
				if(tipoVerificacao.indexOf('comparaData')!=-1){ // Caso seja obrigatório verificar duas datas: data 1 mais antiga que data 2
				// EX: 'data_publicacao','comparaData:data_fim_publicacao|Data Fim Publicação','Data Início Publicação'
					var compararDatas=false;
					var segundaData=campo;
					
					separador=tipoVerificacao.indexOf(':')+1;
					separador2 = tipoVerificacao.indexOf('|')+1;
					
					var nomeCampo2=tipoVerificacao.substring(separador,separador2-1);
					var nomeCampoListagem2 = tipoVerificacao.substring(separador2,tipoVerificacao.length);
					var primeiraData=document.getElementById(nomeCampo2).value;
					
					if (verificaData(primeiraData) && verificaData(segundaData)){
						var diaPrimeiraData=primeiraData.substring(0,2);
						var mesPrimeiraData=primeiraData.substring(3,5);
						var anoPrimeiraData=primeiraData.substring(6,10);
						var diaSegundaData=segundaData.substring(0,2);
						var mesSegundaData=segundaData.substring(3,5);
						var anoSegundaData=segundaData.substring(6,10);
						if(anoSegundaData == anoPrimeiraData){
							if(mesSegundaData == mesPrimeiraData){
								if((diaSegundaData > diaPrimeiraData)||(diaSegundaData == diaPrimeiraData)){
									compararDatas=true;
								}
							}
							else if(mesSegundaData > mesPrimeiraData){
									compararDatas=true;
							}
						}
						else if (anoSegundaData > anoPrimeiraData){
							compararDatas=true;
						}
					}
					if(!compararDatas){
						msgErro += '- O campo "'+ nomeCampoListagem +'" tem que ter sempre uma data superior à do campo "'+ nomeCampoListagem2 +'". Corrija por favor!\n';
						document.getElementById(nomeCampo).className=cssFormInputErro;
						document.getElementById(nomeCampo2).className=cssFormInputErro;
					}
				}
			}
			else {
				if (tipoVerificacao.charAt(0) == 'R') { //Caso o preenchimento seja obrigatório e não tenha sido inserida nenhuma informação no campo
					document.getElementById(nomeCampo).className=cssFormInputErro;
					msgErro += '- O campo "'+nomeCampoListagem+'" é de preenchimento obrigatório.\n';
				}
			}
		}
	}
	if (msgErro && (msgAlerta=='alert')) { //Despeja todos os erros cá para fora e apresenta a msg de alerta
	  alert('Ocorreram alguns erros no preenchimento do formulário.\nOs campos assinalados com cor diferente precisam de ser corrigidos e/ou preenchidos.\n\nLista de Erros:\n' + msgErro);
	}
	return (msgErro == '');
}

// Função que Limita o tamanho de um campo de texto (text area, por exemplo)
function limitarCaracteres(obj, limiteMaximo) {
	conteudo=obj.value;
	if (conteudo.length > limiteMaximo) {
		alert('Alerta: o campo "'+obj.name+'" não pode exceder os '+limiteMaximo+' caracteres, incluíndo espaços e pontuação!');
		novoConteudo=conteudo.substr(0, limiteMaximo);
		obj.value=novoConteudo;
	}
}

//Função para verificar se existem ', <, >, %  na text area
function verificastring(campo,nome) {
	var p=0;
	var resultado=true;
	var str=(campo.value);
	var ult=str.length;
	while((p < ult)&&(resultado)) {
		car=str.substring(p,p+1);
		if ((car=='\'')||(car=='%')||(car=='>')||(car=='<')) {
			alert('O campo "'+nome+'" tem caracteres inválidos! Corrija por favor.');
			document.getElementById(campo).className=cssFormInputErro;
			resultado=false;
		}
		p++;
	} 
	return resultado;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++ OUTRAS FUNCOES +++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


/*	Conjunto de funcoes criadas pela equipa da Adobe para contornar o problema do IE 
	Copyright 2006 Adobe Systems, Inc. All rights reserved.		// v1.0
*/
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';
	
  document.write(str);
  //alert(str);
}

// alterei o nome desta função para uma coisa mais pt ;)
function activaFlash(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
// End da cena do flash by Adobe (r)


//===========================================================
// ypChaser class definition
//===========================================================
function ypChaser(sLayerId, iTopOffset, iSlideTime, iCeiling, iFloor) {
	this.chaserDiv = null
	this.layerId = sLayerId
	this.topOffset = iTopOffset
	this.slideTime = iSlideTime
	this.ceiling = iCeiling
	this.floor = iFloor
	ypChaser.registry[ypChaser.registry.length] = this
	}
	ypChaser.isIE = window.clientInformation ? true : false
	ypChaser.isIEDTD = ((document.doctype && document.doctype.name.indexOf(".dtd")>-1) || document.compatMode == "CSS1Compat") ? true : false;
	ypChaser.isN4 = document.layers ? true : false
	ypChaser.isN6 = navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 5
	ypChaser.isO5 = navigator.userAgent.indexOf("Opera") != -1 && parseInt(navigator.appVersion) >= 4
	ypChaser.registry = new Array( )
	ypChaser.callRate = 10
	window.setInterval("ypChaser.timer( )", ypChaser.callRate)
	ypChaser.timer = function() {
	for (var i = 0; chObj = this.registry[i]; i++) {
		if (!chObj.chaserDiv) chObj.attemptLoad()
		if (chObj.chaserDiv) chObj.main()
	}
}
ypChaser.prototype.attemptLoad = function() {
	var chDiv = null
	if (ypChaser.isN6 || ypChaser.isO5) chDiv = document.getElementById(this.layerId)
	else if (ypChaser.isIE) chDiv = document.all[this.layerId]
	else if (ypChaser.isN4) chDiv = document.layers[this.layerId]
	if (chDiv && chDiv != null) {
		this.chaserDiv = chDiv
	}
}

ypChaser.prototype.main = function( ){
	this.currentY = this.getCurrentY()
	var scrollTop = ypChaser.getWindowScroll() 
	var newTargetY = scrollTop + this.topOffset
	var floor = ypChaser.getDocumentHeight() - this.floor
	newTargetY = Math.max( newTargetY, this.ceiling)
	if (!ypChaser.isO5) newTargetY = Math.min(newTargetY, floor)
	if ( this.currentY != newTargetY ) {
		if ( newTargetY != this.targetY ) {
			this.targetY = newTargetY
			this.slideInit( )
		}
		this.slide( )
	}
}

ypChaser.prototype.slideInit = function( ){
	this.A = (this.targetY - this.currentY) / this.slideTime / this.slideTime
	this.startT = (new Date()).getTime()
	this.startP = this.getCurrentY()
	this.D = this.targetY - this.startP
}

ypChaser.prototype.slide = function( ){
	var elapsed = (new Date()).getTime() - this.startT
	if (elapsed < this.slideTime) {
		this.moveTo(this.D - (Math.round(Math.pow(this.slideTime - elapsed, 2) * this.A)) + this.startP)
	}
}

ypChaser.prototype.moveTo = function(ny) {
	if (ypChaser.isN4) this.chaserDiv.top = ny
	else this.chaserDiv.style.top = ny + "px"
}

ypChaser.prototype.getCurrentY = function() {
	var n = ypChaser.isN4 ? this.chaserDiv.top : parseInt(this.chaserDiv.style.top)
	return isNaN(n) ? 0 : n
}

ypChaser.getWindowScroll = function() {
	if (ypChaser.isIEDTD) {
		window.status=document.documentElement.scrollTop;
		return document.documentElement.scrollTop;
	}
	else if (ypChaser.isIE) return document.body.scrollTop;
	else return window.pageYOffset
}
ypChaser.getDocumentHeight = function() {
	if (ypChaser.isO5) return 0 // opera can't retreive this property.
	else if (ypChaser.isIEDTD) return Math.max(document.documentElement.scrollHeight, document.documentElement.offsetHeight)
	else if (ypChaser.isIE) return Math.max(document.body.scrollHeight, document.body.offsetHeight)
	else return window.document.height
}

