// Mecanismos de funcionamento da tela
var pilha_tela = new Array();
var cont_retorno = 0; //Determina quantos arquivos de retorno estão sendo aguardados
var baixado_retorno = 0; //Conta quantos arquivos de retorno foram encotrados

//Envia requisições ao Caché
function request_cache(variaveis, funcao, variaveis_adicionais){
	show_hide_processando('Processando. Aguarde!');
	if(variaveis != undefined && variaveis != ''){
		funcao = funcao ? funcao : 'processa_retorno';
		//Variável com string GET para efetuar POST via CURL
		if(variaveis_adicionais != undefined){
			variaveis += variaveis_adicionais;
		}
		envia_http_request('http://www.servcom.com.br/laxml/livro/php/comunicador.php', variaveis, 'POST', funcao);
	}
}

//Processa retorno do XML
function processa_retorno(obj_text){
	//Monta objetos
	eval(obj_text);
	
	//MENSAGEM DE RESPOSTA DO CACHÉ
	if(typeof(mensagem_cache) != 'undefined' && mensagem_cache != null){
		//verificando se é uma tela de confirmação
		if(typeof(campo_rotina) != 'undefined' && campo_rotina != null){
			var conf = confirm(mensagem_cache);
			if(conf){
				var variaveis = 'post_string=' + escape(campo_rotina + '=S&' + rotina + '&JANELA=' + telas_pilha());
			}else{
				var variaveis = 'post_string=' + escape(campo_rotina + '=N&' + rotina + '&JANELA=' + telas_pilha());
			}
			mensagem_cache = null;
			campo_rotina = null;
			rotina = null;
			request_cache(variaveis);
			show_hide_processando();
		}else{
			alert(mensagem_cache);
			mensagem_cache = null;
			erro = null;
			if(typeof(atualiza1) != 'undefined' && atualiza1 != null){
				if(pilha_tela.length > 1){
					var test = MM_findObj('iframe_' + pagina);
					if(typeof(test) != "undefined" && test != null){
	   					window.frames['iframe_' + pagina].set_params('atualiza');
					}
				}
				else{
					var test = MM_findObj('box_conteudo');
					if(typeof(test) != "undefined" && test != null){
					    window.frames['box_conteudo'].set_params('atualiza');
					}
				}	
			}
			else{
				show_hide_processando();	
			}
			
			//Caso se trate da tela de importação de arquivos, reiniciar a tela
			if(pagina=='importa_arquivo.php'){
				document.getElementById('box_conteudo').src = 'telas/importa_arquivo.php';
			}
		}
	}
	
	//LISTA QUE ARQUIVOS DE RETORNO
	else if(operacao == 'LISTAARQUIVOS'){					
		if(objeto_total != undefined){
			show_hide_processando();
			if(cont_retorno == 0 && objeto_total > 0){
				//Solicitando login e senha de usuário
				//verifica_arquivo_retorno('ftp00744', '2cbe244f1d');
				open_popup('..::SERVCOM - Livro Adicional XML::..', 'login_ftp', 'telas/login_ftp.html', 350, 300, 'fecha_janela_popup');
			}else{
				//Mostra mensagem para o usuário
				alert("Nenhum arquivo de retorno está sendo aguardado");
			}
		}
	}
	
	//ARQUIVO DE RETORNO
	else if(operacao == 'ARQUIVO'){
		show_hide_processando();
		//Retorno de algruma transmissão com ERRO
		if(typeof(arquivo_erro) != 'undefined' && arquivo_erro != null){
			alert(arquivo_erro);
			arquivo_erro = null;
		}
		//Retorno de alguma transmissão com SUCESSO
		else if(typeof(arquivo_sucesso) != 'undefined' && arquivo_sucesso != null){
			alert(arquivo_sucesso);	
			arquivo_sucesso = null;
			arquivo_xml = null;
			arquivo_remessa = null;
			rotina_ftp = null;
			close_popup('login_ftp');					
		}
		//Iniciando a transmissão de um arquivo
		else{
			//Solicitando login e senha de usuário			
			open_popup('..::SERVCOM - Livro Adicional XML::..', 'login_ftp', 'telas/login_ftp.html', 350, 300, 'fecha_janela_popup');
		}
	}
	
	//BAIXADO ARQUIVO DE RETORNO
	else if(operacao == 'RETORNOFTP'){
		//Atualiza contador de retornos		
		if(typeof(mensagem_ftp) != 'undefined' && mensagem_ftp != null){
			alert(mensagem_ftp);
			cont_retorno = 0;
			mensagem_ftp = null;
			show_hide_processando();
		}
		else{
			//Verificando se o arquivo solicitado foi encontrado no servidor
			if(typeof(baixado) != "undefined" && baixado != null){
				baixado_retorno++;
				baixado = null;
			}
			//Iniciando verificação do próximo arquivo
			if(cont_retorno < objeto_total){			
				//Verifica existência do próximo arquivo retorno
				verifica_arquivo_retorno();
			}
			//Terminada a verificação
			else{
				if(baixado_retorno > 0){
					alert('Retornos verificados com sucesso! "' + baixado_retorno + '" arquivo(s) de retorno baixado(s) com sucesso!');
				}
				else{
					alert('Verificação concluída! Nenhum arquivo de retorno disponível no momento.');
				}
				
				close_popup('login_ftp');
				cont_retorno = 0;
				baixado_retorno = 0;
				operacao = null;
				
				//Informando ao caché a conclusão da operação
				atualiza_iframe();
				show_hide_processando();
			}
		}
	}
			
	//DEMAIS OPERAÇÕES DE INTERFACE
	else if(typeof(pagina) != 'undefined' && pagina != null){
		//Monta o menu principal
		if(operacao == 'MENUPRINCIPAL'){
			monta_menu();
			show_hide_sair_sistema(true);
		}
		else{
			//Se estiver vazio, é a primeira montagem de tela
			if(pilha_tela.length == 0 || operacao == 'POPUP'){
				telas_pilha('nova', pagina);
			}
			//Atualização/retorno para a mesma página
			else if(operacao == 'TELADADOS'){
				telas_pilha('substitui', pagina); //Substitui tela ativa
			}
			//Um retorno de Pop Up chegou e deve ser fechado
			else if(operacao == 'RETORNO'){
				//Remove o ultimo ID da pilha
				close_popup(pagina);
				pagina = telas_pilha('excluir', pagina);
			}
			
			//############## INICIALIZANDO OPERAÇÕES DE INTERFACE ###################
			if(operacao=='ATUALIZA' || operacao=='RETORNO'){
			    if(pilha_tela.length > 1){
					//window.frames['iframe_' + pagina].set_params('atualiza');
					document.getElementById('iframe_' + pagina).contentWindow.set_params('atualiza');
				}
				else{
				    window.frames['box_conteudo'].set_params('atualiza');
				}
				MM_findObj('titulo_secao').innerHTML = menuSelecionado;
			}
			//Abrindo uma janela popup
			else if(operacao=='POPUP'){
				open_popup('..::SERVCOM - Livro Adicional XML::..', pagina, 'telas/' + pagina + '.html', largura, altura, 'fecha_janela_popup');
				largura = null;
				altura = null;
			}			
			//altera a propriedade SRC do iFrame
			else if(pagina != '' && pagina != undefined){
				show_hide_iframe(pagina);
				MM_findObj('titulo_secao').innerHTML = menuSelecionado;
			}
			else{
				show_hide_processando();
				alert("Operação não realizada pelo Caché!\nNenhuma resposta obtida ou erro encontrado.");
			}
		}
	}		
}

//Aciona a tela de download
function download(url){
	document.getElementById('iframe_auxiliar').src = url;
	document.getElementById('iframe_auxiliar').document.onLoad = function(){
		show_hide_processando();
		document.getElementById('iframe_auxiliar').src = '';
	}
}

//Aciona a verificação do arquivo de retorno
function verifica_arquivo_retorno(ftp_usuario, ftp_senha){
	if(ftp_usuario && ftp_senha){
		ftp_usu = ftp_usuario;
		ftp_sen = ftp_senha;
	}
	if(objeto_total > 0){
		cont_retorno++;
		var arquivo_retorno = eval('objeto' + cont_retorno);
		var arquivo = arquivo_retorno.nome;
		var data = arquivo_retorno.data;
		var variaveis = 'oper=verifica_arquivos&ftp_usuario=' + ftp_usu + '&ftp_senha=' + ftp_sen + '&arquivo=' + arquivo + '&data=' + data;
		request_cache(variaveis);
		show_hide_processando('Verificando: ' + cont_retorno + ' de ' + objeto_total + '.');
	}
}

//Envia um arquivo de remessa anexado pelo usuário
function envia_remessa_upload(){
	show_hide_processando('Processando. Arguarde!');
	open_popup('..::SERVCOM - Livro Adicional XML::..', 'login_ftp', 'telas/tela_upload.php', 350, 300, 'fecha_janela_popup');
}

//Função auxiliar para impressão de relatórios
function imprime_relatorio(){
	document.getElementById('iframe_auxiliar').src = 'telas/relatorio_print.php';
}

//Função auxiliar para executar a operação de impressão
function imprimir(){
	iframe_auxiliar.focus();
	iframe_auxiliar.print();
}

//Função de controle da pilha de telas
function telas_pilha(operacao, id_tela){
	if(operacao=='nova'){
		pilha_tela.push(id_tela);
		return pilha_tela.length;
	}
	else if(operacao=='excluir'){
		var id_pes = id_tela ? id_tela : pilha_tela[pilha_tela.length - 1];
		for(var i = 0; i < pilha_tela.length; i++){			
			if(pilha_tela[i] == id_pes){
				//Remove o ID da tela do array
				pilha_tela.splice(i,1);
				return pilha_tela[pilha_tela.length - 1];
			}
		}
	}
	else if(operacao=='substitui'){
		pilha_tela[pilha_tela.length - 1] = id_tela;
		return pilha_tela[pilha_tela.length - 1];
	}
	else{
		return pilha_tela[pilha_tela.length - 1];
	}
}

//Remove a última jenela da pilha
function fecha_janela_popup(){
	pagina = telas_pilha('excluir');
}

//Recarrega a página conforme seção atual do sistema aberto
function atualiza_iframe(){
	show_hide_processando();
	seleciona_menu(dadosSelecionado[0], dadosSelecionado[1], dadosSelecionado[2]);
}

//Retorna o índice da janela a partir do id
function get_tela_by_id(id_tela){
    var total_telas = window.frames.length;
    for(var i=0; i<total_telas; i++){
        if(window.frames[i].id == id_tela){
            return window.frames[i];
        }
    }
    return false;
}

//Processa os objetos criados pelo processamento do HTML
function processa_objetos(string_objetos){	
	eval(string_objetos);
}

//Controla a visibilidade do cabeçalho principal
function controla_cabecalho(modo){
	//exibindo Cabeçalho principal
	if(modo==true){
		MM_findObj('cabecalho_vazio').style.display = 'none';
		MM_findObj('cabecalho').style.display = 'block';
	}
	else{
		MM_findObj('cabecalho_vazio').style.display = 'block';
		MM_findObj('cabecalho').style.display = 'none';
	}
}

//Função que aciona o Caché para a recuperação de alguma informação
function seguranca(){
	var variaveis = 'oper=retorna_arquivos';
	envia_http_request('php/engine.php',variaveis,'POST','processa_retorno');
}


//############ FUNÇÕES DE CONTROLE DO MENU DO SISTEMA #############################

//Controla a visibilidade do menu superior do sistema
function show_hide_menu_superior(modo){
	if(modo){
		MM_findObj('parte2').className = 'cabecalho_menu';
		MM_findObj('barra').className = 'barra_menu';
		MM_findObj('conteudo_barra').style.visibility = 'visible';
	}
	else{
		MM_findObj('parte2').className = 'cabecalho_sem_menu';
		MM_findObj('barra').className = 'barra_sem_menu';
		MM_findObj('conteudo_barra').style.visibility = 'hidden';
	}
}

//Controla a visibilidade da opção para sair do sistema
function show_hide_sair_sistema(modo){
	if(modo){
		MM_findObj('logout').style.display = 'block';
	}
	else{
		MM_findObj('logout').style.display = 'none';
	}
}

//Controla a visibilidade do menu superior do sistema
function show_hide_menu_central(modo){
	if(modo){
		MM_findObj('menu_central').style.display = 'block';
		document.getElementById('box_conteudo').style.display = 'none';
	}
	else{
		MM_findObj('menu_central').style.display = 'none';
		document.getElementById('box_conteudo').style.display = 'block';
	}
}

//Controla o carregamento da seção no iframe
function show_hide_iframe(id_pagina){
	show_hide_menu_central();
	show_hide_menu_superior(true);
	//Testa se é id_pagina ou nome do arquivo
	if(id_pagina.indexOf('.') == -1){
		document.getElementById('box_conteudo').src = 'telas/' + id_pagina + '.html';
	}else{
		document.getElementById('box_conteudo').src = 'telas/' + id_pagina;
	}
}

//Função construtora do menu superior e o central
var cont_menus = 0;
var last_menu = null;
function monta_menu(){
	var string_menu = '';
	var string_menu_central = '';
	
	//Menu atos
	if(typeof(atos) != 'undefined' && atos != null){
		string_menu += monta_string_menu('Atos praticados', 'atos', atos);
		string_menu_central += monta_string_menu_central('Atos praticados', 'atos', atos);
		cont_menus++;		
		last_menu = ['Atos praticados', 'atos', atos];
		atos = null;
	}
	//Menu selos
	if(typeof(selos) != 'undefined' && selos != null){
		string_menu += monta_string_menu('Selos', 'selos', selos);
		string_menu_central += monta_string_menu_central('Selos', 'selos', selos);
		cont_menus++;
		last_menu = ['Selos', 'selos', selos];
		selos = null;
	}
	//Menu grerj
	if(typeof(grerj) != 'undefined' && grerj != null){
		string_menu += monta_string_menu('GRERJ', 'grerj', grerj);
		string_menu_central += monta_string_menu_central('GRERJ', 'grerj', grerj);
		cont_menus++;
		last_menu = ['GRERJ', 'grerj', grerj];
		grerj = null;
	}
	//Menu tabelas
	if(typeof(tabelas) != 'undefined' && tabelas != null){
		string_menu += monta_string_menu('Tabelas', 'tabelas', tabelas);
		string_menu_central += monta_string_menu_central('Tabelas', 'tabelas', tabelas);
		cont_menus++;
		last_menu = ['Tabelas', 'tabelas', tabelas];
		tabelas = null;
	}
	//Menu Arquivos
	if(typeof(arquivos) != 'undefined' && arquivos != null){
		string_menu += monta_string_menu('Arquivos', 'arquivos', arquivos);
		string_menu_central += monta_string_menu_central('Arquivos', 'arquivos', arquivos);
		cont_menus++;
		last_menu = ['Arquivos', 'arquivos', arquivos];
		arquivos = null;
	}
	//Menu Relatórios
	if(typeof(relatorios) != 'undefined' && relatorios != null){
		string_menu += monta_string_menu('Relatórios', 'relatorios', relatorios);
		string_menu_central += monta_string_menu_central('Relatórios', 'relatorios', relatorios);
		cont_menus++;
		last_menu = ['Relatórios', 'relatorios', relatorios];
		relatorios = null;
	}
	//Menu opcoes
	if(typeof(opcoes) != 'undefined' && opcoes != null){
		string_menu += monta_string_menu('Opções', 'opcoes', opcoes);
		string_menu_central += monta_string_menu_central('Opções', 'opcoes', opcoes);
		cont_menus++;
		last_menu = ['Opções', 'opcoes', opcoes];
		opcoes = null;
	}
	
	//Inserindo o menu superior
	MM_findObj('menu_superior').innerHTML = string_menu;
	
	if(cont_menus > 1){
		//Inserindo o menu central
		MM_findObj('menu_central').innerHTML = '<span id="titulo_menu_central"><strong>Bem vindo ao SERVCOM Livro Adicional Eletrônico.</strong> Selecione a opção abaixo para iniciar a utilização do sistema.</span>' + string_menu_central;
	
		//Retirando a tela de login
		document.getElementById('box_conteudo').src = '';
	
		show_hide_menu_central(true);
	}
	//Carregando a única sessão dos sistema
	else{
		show_hide_processando('Processando. Aguarde!');
		show_hide_menu_central(false);
		seleciona_menu(last_menu[2].item1.rotina, last_menu[1], last_menu[0]);
		
		last_menu = null;
		cont_menus = null;
	}
	
	show_hide_processando();
}

//Monta o HTMl do menu superior
function monta_string_menu(titulo, grupo, object){
	var str_menu = '<li onmouseover="show_menu(\'sub_menu_' + grupo + '\', true)" onmouseout="timerHidePop()">';
	str_menu += '<a href="#">' + titulo + '</a>';
	   
	//Percorrendo os submenus
	var cont = 1;
	var item_menu = 'object.item' + cont;
	while(typeof(eval(item_menu)) != 'undefined' && item_menu != null){
		item_menu = eval(item_menu);
		if(cont==1){
			str_menu += '<ul id="sub_menu_' + grupo + '">';
		}
		
		str_menu += '<li><a href="javaScript:seleciona_menu(\'' +  unescape(item_menu.rotina) + '\', \'' + titulo + '\', \'' + item_menu.rotulo + '\')">' + item_menu.rotulo + '</a></li>';
		
		cont++;
		item_menu = 'object.item' + cont;
	}
	//Fechando submenus
	if(cont > 1){
		str_menu += '</ul>';
	}

	str_menu += '</li>';
	
	return str_menu;
}

//Monta o HTML do menu do menu central
function monta_string_menu_central(titulo, grupo, object){
	var str_menu = '<div id="menu_' + grupo + '" class="caixa_menu_central" align="left">';
	str_menu += '<span>' + titulo + '</span>';
	
	//Percorrendo os submenus
	var cont = 1;
	var item_menu = 'object.item' + cont;
	while(typeof(eval(item_menu)) != 'undefined' && item_menu != null){
		item_menu = eval(item_menu);
		if(cont==1){
			str_menu += '<ul class="itens_menu_central">';
		}
		str_menu += '<li><a href="javaScript:seleciona_menu(\'' +  unescape(item_menu.rotina) + '\', \'' + titulo + '\', \'' + item_menu.rotulo + '\')">' + item_menu.rotulo + '</a></li>';

		cont++;
		item_menu = 'object.item' + cont;
	}
	//Fechando submenus
	if(cont > 1){
		str_menu += '</ul>';
	}
	
	str_menu += '</div>';
	
	return str_menu;
}

//Função para a seleção de uma opção do menu
var menuSelecionado;
var dadosSelecionado;
function seleciona_menu(rotina, grupo, secao){
	var variaveis = 'post_string=' + escape(rotina);
	request_cache(variaveis);
	
	//Informando a seleção do usuário
	menuSelecionado = grupo + ' / ' + secao;
	dadosSelecionado = [rotina, grupo, secao];
}

//Apaga os objetos criados pelo recebimento da requisição
function apaga_objetos(){
	if(typeof(objeto1) != "undefined" && objeto1 != null){
		var metodo = 'objeto';
	}
	else if(typeof(atualiza1) != "undefined" && atualiza1 != null){
		var metodo = 'atualiza';
	}
	if(typeof(metodo) != "undefined" && metodo != null){
		var total = eval(metodo + '_total');
		for(var i=1; i <= total; i++){
			eval(metodo + i + ' = null;');
		}
		eval(metodo + '_total = null;');
	}
}

//Aciona a função de ajuda, conforme tela ativa
function ajuda(){
	open_popup('..::SERVCOM - Livro Adicional XML - AJUDA::..', 'tela_ajuda', 'ajuda/ajuda.html', 400, 280);
}


function ajusta_iframe(){
	alert(window.frames["box_conteudo"].document.body.scrollHeight);
}

//Sair do sistema
function logout(){
	var conf = confirm('Você irá sair do sistema. Todas as informações não salvas serão perdidas.\n\nClique em OK para confirmar ou em CANCELAR para voltar ao sistema!');
	if(conf){
		var variaveis = 'oper=logout';
		request_cache(variaveis, 'inicializa_sistema');		
	}
}

//Inicializa aplicação retornando à tela de login
function inicializa_sistema(){
	if(document.getElementById('box_conteudo').src != 'telas/login.html'){
		MM_findObj('menu_superior').innerHTML = '';
		MM_findObj('menu_central').innerHTML = '';
		MM_findObj('titulo_secao').innerHTML = '';
		show_hide_menu_superior();
		show_hide_menu_central();
		show_hide_sair_sistema();
		document.getElementById('box_conteudo').src = 'telas/login.html';
		document.getElementById('iframe_auxiliar').src = '';
		apaga_objetos();
		show_hide_processando();
	}
}