<!--
oLogo=null;
gEstadoAba=0
gsTabAnt="" //armazena a última tab selecionada 
gsTamObjeto=""
/***
  Função contrutora do componente botões
  Parâmetros: 1) nome - nome da instância do objeto
  			  
****/

var oNavegacao = null;
try{
	oNavegacao = oNavegacao;
} catch (e) {
	oNavegacao = null;
}


var gModuloCorrente = null;
try{
	gModuloCorrente = parent.gModuloCorrente;
} catch (e) {
	gModuloCorrente = null;
}




function Botoes(nome){
	//os objetos só podem ser instanciados no frame de Dados
	//this.name = "parent.Dados." +nome

	if (nome==null || nome==""){
		alert("Erro. Deve ser passado um nome para a referência do botão");
		return;
	}
	
	this.name = nome;
	this.Elem = new Array();

	//propriedades privadas
	this.itens = new Array(); //itens congelados

	this.setItemHab = botSetItemHab;

	//somente do tipo 'botoes' a propriedade frame terá método para escrita

	this.setFrame = botSetFrame;
//	this.frame = "MIDDLE.TABS";
  this.frame = "";
	
	this.getFrame = botGetFrame;
	this.addItem = botAddBotao;
	this.addIcone = addIcone;
	this.setBotoesPadrao = setBotoesPadrao;
	this.setHabilitaDeck = setHabilitaDeck;
//	this.congelaEstado = congelaEstado
//	this.descongelaEstado = descongelaEstado

	this.escreve = botEscreveItens;
	this.limpa = botLimpa;
	
	//propriedade privada
	this.tipo="BOTAO";

	//rotinas privadas
	this.setFrameDados = botSetFrameDados;
}

function botLimpa () {
	tam = this.Elem.length;
	var i = 0;
	for (i=tam-1; i>=0 ; i--) {
		this.Elem.pop();
	}
}

function Logo(nome,imagem){
	if (nome==null || nome==""){
		alert("Erro. Deve ser passado um nome para a referência do logo");
		return;
	}
	if (imagem==null || imagem==""){
		alert("Erro. Deve ser passado o nome para a imagem do logo");
		return;
	}
	
	this.name = nome;
	this.Elem = new Array();

	this.setFrame = botSetFrame ;
	this.frame = "frameNavegacao";

	this.addLogo = addLogo;
	this.addLogo(imagem); //apenas uma imagem por instanciacao e apenas um logo por frame
	
	this.escreve = botEscreveItens;
	
	//propriedade privada
	this.tipo="LOGONAVEGACAO";

}



/***
  Função contrutora do componente abas
****/
function Abas(nome,linhaDupla){
	//os objetos só podem ser instanciados no frame de Dados
	this.name = nome;

	if (nome==null || nome==""){
		alert("Erro. Deve ser passado um nome para a referência da aba");
		return;
	}
	
	this.Elem = new Array();
	this.itens = new Array(); //itens congelados
	this.tipo="ABAS";
	
	//indica se as abas serão dispostas em duas linhas 
	if (linhaDupla==null || linhaDupla=="") linhaDupla = false;
	this.linhaDupla = linhaDupla;

	this.setItemHab = botSetItemHab;

	this.frame = "MIDDLE.TABS";

	this.getFrame = botGetFrame;

	this.addItem = botAddAba;
	this.escreve = botEscreveItens;
	this.selTab = botSelTab;
	this.SwapLinha = botSwapLinha;
	this.setEventoCliqueAba = botSetEventoCliqueAba;
	this.setEventoTrocouAba = botSetEventoTrocouAba;
	this.setHabilitaDeck = setHabilitaDeck;
//	this.getFormCache = getFormCache //opção ainda não disponível. verificar viabilidade com equipe de tecnologia

}

/*  Seta se existe uma chamada a um método quando uma aba for selecionada */
function botSetEventoCliqueAba(sAcao){
	this.oAcaoCliqueAba = sAcao;
}

/*  Seta se existe uma chamada a um método depois que uma aba for selecionada */
function botSetEventoTrocouAba(sAcao){
	this.oAcaoTrocouAba = sAcao;
	alert('botSetEventoTrocouAba: ');
}


/***
  Propriedades para cada item de botão ou aba
****/
function botItem(tipo, nome, texto, dica, acao, estadoImagem, grafico, ctrlClick){
  /* para cada item esta associada um tipo 'botao' ou 'abas'*/
	this.tipoItem = tipo;
	
	if (this.tipoItem=="ABAS"){
		//abas sempre são escritas no frame de acoes
		this.frame = "MIDDLE.TABS";
	}else{
		//botões são escritos no frame de acoes ou no de dados
		this.frame = "";
		this.setFrame = botSetFrame;
	}
	this.getFrame = botGetFrame;
	
	/**	O parâmetro estadoImagem tem como função, guardar o estado permanente da figura do objeto. No momento que 
		é instanciado o objeto, passa-se o estado desse objeto. Somente o objeto do tipo aba muda seu estado 
		em tempo de execução. Caso não seja informado, por default, é assumido zero [off]. **/
	if(estadoImagem==null || estadoImagem=="") estadoImagem=0;
	this.estadoImagem = estadoImagem;
	/*****/
	
	this.name = nome;
	this.dica = (dica ? dica : this.texto);
	this.acao = acao;
	this.grafico = grafico;
	
	if (grafico){
		//se for botão gráfico, sempre será no frame de dados e nunca terá texto
//		if (this.frame=="" || this.frame==null){
//			this.frame = "frameSetTransacao.Dados"
//		}
//		alert("ADDITEM   this.name=" +this.name+ " this.frame=" +this.frame);

/*		if (dica==null || dica==""){
			alert("Erro. Botão gráfico [" +texto+ "] deve ter uma dica associada.")
		}*/
	}else{
		this.texto = texto;
	}

	if (this.frame=="" || this.frame==null){
		this.frame = "frameSetTransacao.Dados";
	}
	

  /* propriedades diretamente ligada a funcionalidade controle de clik sucessivos */
	this.ctrlClick = ctrlClick;
	this.estado = true;
	this.setestadoclick = botSetEstadoClick;
	/***/

	this.eventomouse = botAvaliaEvento
	this.avaliaevento = botAvaliaEvento
	this.montabotao = botMontaItens
}

/*
	Adiciona elementos ao deck de Abas
*/
function botAddAba(id, texto, dica, estadoImagem, pagina){
	
	var i = this.Elem.length
  /* quando tipo "abas" a acao é sempre a mesma: selecionar a tab clicada e deselecionar a outra */

	this.Elem[i] = new botItem(this.tipo, this.name+ ".Elem[" +i+ "]", texto, dica, this.name+ ".selTab('" +id+ "')", estadoImagem)
	this.Elem[i].linha = this
	this.Elem[i].eventomouse=botSeleciona
	this.Elem[i].id = id
	if (pagina) this.Elem[i].pagina = pagina;
}


/*
	Adiciona elementos ao deck de Botões
	Parâmetros: id - nro único da instância
				texto - descrição do botão 
				dica - dica do botão
				acao - metodo a ser chamado associado ao evento click
				estadoImagem - [0] Off | [1] On | [2] Desabilitado
				ctrlClick - controle de click sucessivos
*/
function botAddBotao(id, texto, dica, acao, estadoImagem, grafico, ctrlClick){
	var i = this.Elem.length

	if (id.toUpperCase()=="SEPARADOR"){
		this.Elem[i] = new botItem(this.tipo)
		this.Elem[i].id = id
		return
	}

	//os métodos sempre se encotram no frame Geral
	//if (acao!="" && acao!=null) acao = 'javascript:parent.Geral.' +acao

  /*definições default */
	if((estadoImagem==null)||(estadoImagem=="")) estadoImagem = 0

  /* qualquer ação pode ser associada ao item do tipo botão */
	this.Elem[i] = new botItem(this.tipo, this.name+ ".Elem[" +i+ "]", texto, dica, acao, estadoImagem, grafico, ctrlClick)
	this.Elem[i].linha = this
	this.Elem[i].id = id
}

function addIcone(grafico,dica){
	var i = this.Elem.length

	if (grafico.toUpperCase()=="SEPARADOR"){
		this.Elem[i] = new botItem(this.tipo)
		this.Elem[i].id = grafico
		return
	}

	this.Elem[i] = new botItem("botao", this.name+ ".Elem[" +i+ "]", "", dica, "javascript:executaToolbar(" +i+ ")", 0, grafico,false)
	this.Elem[i].linha = this
	this.Elem[i].id = "icone" +i
}

function addLogo(grafico){
	var i = 0; //apenas um logo por deck

	this.Elem[i] = new botItem("LOGONAVEGACAO", this.name+ ".Elem[" +i+ "]", "", "", "javascript:executaLogo(" +i+ ")", 0, grafico,false);
	this.Elem[i].linha = this;
	this.Elem[i].id = "logo" +i;
}


/***
	Função que escreve os botões/abas (objetos) num determinado div ou retorna o html que faz com 
	que os objetos sejam escritos em um determinado trecho do html
	Parâmetro: nddiv = div a ser usada para escrever os objetos. obs.: substitui o html dentro
			   da div pelo retorno dessa rotina
****/
function botEscreveItens(nddiv){

	/* apenas para uso do tipo abas com mais de uma linha */
	var fim = this.Elem.length
	
	if (this.tipo=="ABAS") if (this.linhaDupla) {fim = Math.ceil(fim/2)}
	
	sTab=""
	for (var i=0;i<fim;i++) {sTab+=this.Elem[i].montabotao();}

	divaba='<div id="x2' +botLnome(this.name)+ '"><table border=0 cellspacing=0 cellpadding=0><tr>' +sTab+ '</tr></table></div>'
	sTab=""
	
	if (this.tipo=="ABAS"){
		if (fim < this.Elem.length){
			/* concatena o restante dos botões */
			for (var i=fim;i<this.Elem.length;i++) {sTab+=this.Elem[i].montabotao()}
			divaba="<div id='x1" +botLnome(this.name)+ "' onclick='" +this.name+ ".SwapLinha(eval(document.getElementById(\"x1" +botLnome(this.name)+ "\")),eval(eval(document.getElementById(\"x2" +botLnome(this.name)+ "\"))))'><table border=0 cellspacing=0 cellpadding=0> <tr>" +sTab+ "</tr></table></div>\n" +divaba
		}
	}
	
	//caso botões seja escrito em dados e não seja de relacionamento, a div passada como parâmetro servirá de referência para a escrita dos mesmos

//	if (this.frame != "frameNavegacao" && !this.Elem[0].grafico){
	if (this.frame.indexOf('TABS')>0){ //verifica se aba/botao serão escritos no frame de acoes
		if (this.tipo=="ABAS"){
			// as abas sempre serão no frame (Acoes) e serão escritas numa div chamada Abas
			nddiv = "Abas"
		}else{
			// os botões escritos no frame (Acoes) serão sempre escritos numa div chamada Botoes
			nddiv = "Botoes"
		}
	}

	if (nddiv!=null && nddiv!=""){
		//eval(this.frame+ '.document.getElementById("' +nddiv+ '").innerHTML=divaba')
    eval('document.getElementById("' +nddiv+ '").innerHTML=divaba')
	}else{
		return divaba
	}

	if (this.tipo=="ABAS"){
		achou = false
		for (i=0; i<this.Elem.length; i++){
			if (this.Elem[i].estadoImagem==1){
				gsTabAnt = this.Elem[i].id
				achou = true
				break
			}
		}
//		if (achou==false){
//			alert("Erro. Deve ser passado pelo menos uma aba selecionada no momento da adição das abas.")
//			return
//		}
	}
/*
	for (var i=0; i<fim; i++) {
		tmp1 = eval(this.frame + '.document.getElementById("aoBotoesElem' + i + '");');
		tmp2 = eval(this.frame + '.document.getElementById("afoBotoesElem' + i + '");');
		tmp3 = eval(this.frame + '.document.getElementById("doBotoesElem' + i + '");');
		if (tmp1) {
			tmp = tmp1.className
			tmp1.className = null; 
			tmp1.className = tmp;
		}
		if (tmp2) {
			tmp = tmp2.className
			tmp2.className = null; 
			tmp2.className = tmp;
		}
		if (tmp3) {
			tmp = tmp3.className
			tmp3.className = null; 
			tmp3.className = tmp;
		}
		tmp1.style.fontSize = '12pt';
		tmp2.style.fontSize = '12pt';
		tmp3.style.fontSize = '12pt';
	}
*/

}

/***
As figuras default são definidas no arquivo de estilo. Caso o usuário deseje 
informar uma figura alternativa para o botão, esse é pessado no parâmetro na
chamada da rotina construtora do componente.
****/
function botMontaItens(){
	
	//caso seja um separador, cria uma coluna com um espaçamento mínimo
	if (this.id.toUpperCase()=="SEPARADOR"){
		//usa a classe de estilo BotaoOn, para evitar que o html se desloque quando o mouse passa por cima	
		return "<td class='BotaoOn' style='width:5px'></td>"
	}

	/*****
		a chamada a cancelBubble evita que quando a aba estiver desabilitada, o evento onclick não chegue até a div mais externa 
		onde tem a chamada para o swap
	*****/
	//alert("this.acao=" +this.acao+ " this.texto=" +this.texto)

	if (this.tipoItem.toUpperCase()=="LOGONAVEGACAO"){ 
		str = ' onclick="javascript: ' +this.acao+ '" '
	}else{
		if (this.tipoItem.toUpperCase()=="BOTAO"){ 
			if (!this.grafico){
				//ativa nos botões dois eventos: [onmouseup] - ativa o estado OFF e chama a acao relacionada ao botão [onmousedown] ativa o estado ON
				str = botLnome(this.name)+ '" href="javascript: if (' +this.name+ '.estadoImagem!=2 && ' +this.name+ '.estado) {if (' +this.name+ '.ctrlClick) {' +this.name+ '.setestadoclick(false);' +this.acao+ ';}else{' +this.acao+ ';}  void(0)}" ' +((this.dica!=null && this.dica!='')? 'title= "' +this.dica+ ' "':'')+
						  ' onMouseUp="' +this.name+ '.eventomouse(0)"' +  ' onmousedown="' +this.name+ '.eventomouse(1)"'
			}else{
				str = ' onclick="javascript: if(' +this.name+ '.estadoImagem!=2 && ' +this.name+ '.estado){' +this.acao+ '}" '+ ((this.dica!='' && this.dica!=null)?' title="'+this.dica+'"':"")+ //só coloca title quando o botão gráfico não for um icone da toolbar (navegacao)
					  ' onmouseout="' +this.name+ '.eventomouse(2)"' +  ' onmouseover="' +this.name+ '.eventomouse(4)"'
				//alert(str+",  this.dica="+this.dica)
	//				  ' onmouseup="' +this.name+ '.eventomouse(0)"' +  ' onmousedown="' +this.name+ '.eventomouse(4)"'
			}
		}else{
			//ativa nas abas os eventos: [onmouseout] - ativa o estado OFF | [onmouseover] - ativa o estado ON | [onmouseclick] - dependendo do estado da aba, cancela o bubble event ou ativa o estado ON
			str = botLnome(this.name)+ '" href="javascript: if (' +this.name+ '.estadoImagem!=2) {' +this.acao+ '; void(0)}" title="' +this.dica+ '" '+
					  ' onmouseout="' +this.name+ '.eventomouse(2)"' + ' onmouseover="' +this.name+ '.eventomouse(4)"' +
					  ' onclick="' +this.name+ '.eventomouse(3)";'
					  // ajustar esse problema: ((this.estadoImagem==2)? ' onclick="window.event.cancelBubble = true;"' : ' onclick="' +this.name+ '.eventomouse(3);"')
		}
	}
	iniIE = 'id="d' +botLnome(this.name)+ '"' + '  style="vertical-align: middle; background:url(' +botSelImagem(this,this.estadoImagem,"e")+ ')"' 
	iniIEd = 'id="f' +botLnome(this.name)+ '"' + '  style="vertical-align: middle; background:url(' +botSelImagem(this,this.estadoImagem,"d")+ ')"' 

	//alert("this.name=" +this.name+ " iniIE=" +iniIE)
	sColuna = ""

	if (!this.grafico){
		sColuna +=  '<td ' + iniIE + ' nowrap>' +
						'<A id="a' + str + ' ' +							
							'CLASS="' + botSelEstilo(this,this.estadoImagem) + '" '+ 
							'style=' +
							'"TEXT-DECORATION:none'+((this.name+ '.estadoImagem!=2')?'':'; cursor:default')+'">'+
							'&nbsp;&nbsp;&nbsp;&nbsp;' +this.texto+ '&nbsp;&nbsp;' + 
						'</A>'+
					'</td>'+
					/*	
//					'<td nowrap CLASS="' +botSelEstilo(this,this.estadoImagem)+ '" width="5px" height="20px "' +iniIEd+ '>&nbsp;' +
//					'<td  style="width:5px;height:20px"' +iniIEd+ '>' +
						Alteração realizada para que apareçam as imagens da direita corretamente 
						no Netscape
					*/
					'<td width="5px" height="20px" ' + iniIEd + '>' +
						'<A id="af' + str + ' ' +
							'CLASS="' +botSelEstilo(this,this.estadoImagem) + '" ' +
							'style="font-size: 1px; ' +
							'TEXT-DECORATION:none'+((this.name+ '.estadoImagem!=2')?'':'; cursor:default')+'">' +
						'</A>' +
					'</td>';
					//alert("sColuna: " + sColuna);
	}else{
		sColuna += '<td style="cursor: hand;" title=""><img src="' +botSelImagem(this,this.estadoImagem)+ '" id="' +botLnome(this.name)+ '" ' +str+ '></td>';
	}

	/* Observação importante a passar para o Antônio:
		Cuidar figuras com extremidades arredondadas, a segunda coluna da table (direita figura) come uma parte da figura,
		dando um aspecto menos arredondado do que o lado esquerdo.
		Sugestão: ajustar a largura da segunda coluna com um tamanho fixo
	*/
			
	return sColuna;
}

 
/**************************************************************
 Eventos: 
 0 = onmouseup
 1 = onmousedown
 2 = onmouseout
 3 = onmouseclick
 4 = onmouseover
 5 = onmousedbclick
 
 Imagens:
 0 = imagemOff
 1 = imagemOn
 2 = imagemDisable
 

****************************************************************/
function botAvaliaEvento(evento){ 
	var imagem
	var aux
	var aux2

	if (evento==null) evento=0

	if (this.dica!="") window.status = this.dica

	if (this.estadoImagem==2){
		 imagem=2
	}else
		 if (this.tipoItem=="BOTAO"){
		 		switch (evento) {
							 case 0 : imagem=0; break; //onmouseup
							 case 1 : imagem=1; break; //onmousedown
							 case 2 : imagem=0; break; //onmouseout
							 case 3 : imagem=1; break; //onmouseclick
							 case 4 : imagem=1; break; //onmouseover
							 case 5 : imagem=1; break; //onmousedbclick
							 case 6 : imagem=2; break; 
			  }
 
		}else{
		    /* no somente quando o usuário clica na aba inverte a figura da aba */
		 		switch (evento) {
							 case 0 : imagem=gEstadoAba; break; //onmouseup
							 case 1 : imagem=gEstadoAba; break; //onmousedown
							 case 2 : if(this.estadoImagem==0) imagem=0; break; //onmouseout
							 case 3 : imagem=1; break; //onmouseclick
							 case 4 : imagem=1; break; //onmouseover
							 case 5 : imagem=gEstadoAba ; break; //onmousedbclick
							 case 6 : imagem=2; break; 
							 //case 5 : imagem=((gEstadoAba==1)?gEstadoAba=0:gEstadoAba=1); break; //onmousedbclick
			  }
		}		

	//alert("this.tipoItem: " + this.tipoItem + "\nthis.estadoImagem: " + this.estadoImagem + "\nimagem: " + imagem);

	if (imagem==null) return;

	if (this.grafico){
		eval("document.getElementById('" +botLnome(this.name)+"').src='" +botSelImagem(this,imagem)+ "'")
		return		
	}
	//alert("imagem: " + imagem);
	eval("document.getElementById('d" +botLnome(this.name)+"').style.background='url(" +botSelImagem(this,imagem,"e")+ ")'")
	eval("document.getElementById('f" +botLnome(this.name)+"').style.background='url(" +botSelImagem(this,imagem,"d")+ ")'")

	eval("document.getElementById('a" +botLnome(this.name)+"').className='"+botSelEstilo(this,imagem)+"';")
	eval("document.getElementById('af" +botLnome(this.name)+"').className='"+botSelEstilo(this,imagem)+"';")

	if (imagem==2){
		eval("document.getElementById('a" +botLnome(this.name)+"').style.cursor = 'default'")
	}else{
		eval("document.getElementById('a" +botLnome(this.name)+"').style.cursor = 'hand'")
	}
	
   return true
}

function botLnome(texto){
	var tx= texto.replace(/\W/g,"")
	return tx
}


/****
Se o usuário decidir que um determinado botao ira usar a propriedade 
ctrlClick, a partir do momento que o usuario clicar nesse botao, esse ficará com o
evento click bloqueado até que este método seja chamado passando TRUE
*****/
function botSetEstadoClick(estado){
   /* apenas para botões vale o teste dos clicks sucessivos */
	 if (this.tipo=="BOTAO") this.estado = estado
}

function botSelEstilo(objeto,indice){
	var str = objeto.tipoItem
	
	if (str=="BOTAO"){
		if (objeto.frame.indexOf('Acoes')<0){
			//os botoes do frame de dados são diferentes dos botoes do frame acoes
			str = "BotaoRel"
		}else{
			str = "Botao"
		}
	}
	
	switch (indice) {
		case 0 : str+="Off";  break;
		case 1 : str+="On"; break;
		case 2 : str+="Des"; break;
	}
	return str
}

function botSelImagem(objeto, estado, lado){
	var str = objeto.tipoItem
	
	if (str=="BOTAO" && !this.grafico){
		if (objeto.frame.indexOf('Acoes')<0){
			//os botoes do frame de dados são diferentes dos botoes do frame acoes
			str = "BotRel"
		}else{
			str = "Bot"
		}
	}else{
		if (str="ABAS"){str = "Abas"}
	}
	
	if (objeto.grafico){
		var imagem=""
		//Logo não tem comportamento On/Off
		if (estado==1){
			imagem = objeto.grafico + ((objeto.tipoItem.toUpperCase()!="LOGONAVEGACAO")?'On':'')
		}else{
			imagem = objeto.grafico + ((objeto.tipoItem.toUpperCase()!="LOGONAVEGACAO")?'Off':'')
		}

		str = "img/" +imagem+ ".gif"
		return str
	}
	
	/*pelo fato dos objetos do frame de ações se encontrarem num html compartilhado e, portanto num outro caminho, é feito esse teste*/
/*	if (objeto.frame=="Dados" && objeto.tipoItem=="BOTAO"){
		//botão de relacionamento
		str = "../Imagens/" +str
	}else{
			str = "../" +gModuloCorrente.pastaModulo+ "/Imagens/" +str
	}*/
	
	str = "img/" +str

	switch (lado){
		case "e" : str+="Esq";  break;
		case "d" : str+="Dir"; break;
	}
	switch (estado){
		case 0: str+="Off";  break;
		case 1: str+="On"; break;
		case 2: str+="Off";  break;
	}
	return str+=".gif"
	
}

/* faz a troca das divs quando haver mais de uma linha de abas */
function botSwapLinha(div,div2){
	var x=div.innerHTML
	div.innerHTML=div2.innerHTML
	div2.innerHTML=x
	//alert("botSwapLinha");
}

function botSeleciona(evento){
//  if (this.estadoImagem==2) return

/*	if (evento==3||evento==5) {
    	//alert("BOT SELECIONA  evento=" +evento+ " this.linha.ElemAtivo.name=" +this.linha.ElemAtivo.name)
			if(this.linha.ElemAtivo) {this.linha.ElemAtivo.avaliaevento(evento)}
			this.linha.ElemAtivo=this;
	}*/
	//alert("evento: " + evento);
	this.avaliaevento(evento)
}


function botSelTab(sTab){
	var i;

//alert("Entrou na: function botSelTab(" + sTab + ")");

	if (this.oAcaoCliqueAba != null) {
		if (this.oAcaoCliqueAba(sTab)==false){
			//o programador cancelou a troca de aba
			return;
		}
	}	
	
	for(i=0;i<this.Elem.length;i++) 
		if(this.Elem[i].id==sTab) 
			break;
	
	// avisa o programador que não encontrou o id da página
	if (i<this.Elem.length==false){
		alert("Erro. Não foi possível selecionar uma aba. Id da tab [" +sTab+ "] não encontrada.")
		return
	}

    if (this.Elem[i].pagina){

		/*Opção ainda não disponível, aguardando definção...
		//salva a div inteira
		saveLayer(gsTabAnt,frameSetTransacao.Dados.document.getElementById(gsTabAnt).outerHTML)*/
//		eval("frameSetTransacao.Dados.document.location='" +oNavegacao.getCaminhoBase()+"/"+gModuloCorrente.pastaModulo+"/Html/"+this.Elem[i].pagina+"';")
        //alert("parent.BODY.document.location='"+this.Elem[i].pagina+"';");
		eval("parent.BODY.document.location='"+this.Elem[i].pagina+"';")
		//oNavegacao.setUltPaginaCarregada(this.Elem[i].pagina);//a cada troca de página, ajusta a pilha (quando entrar num relac, volta pra aba correta)
		//frameSetTransacao.oAcoes.oDocument.getElementById('Cabecalho').innerHTML = ""; //medida provisória para limpar o abecedário para lista num relacionamento
	}else{

		if (gsTabAnt!='' && gsTabAnt!=null) {
//			var obj = frameSetTransacao.Dados.document.getElementById(gsTabAnt);
      var obj = document.getElementById(gsTabAnt);
			if (obj) {
				obj.style.visibility = "hidden";
				obj.style.display = "none";
				//alert("gsTabAnt: " + gsTabAnt);
			}
		}
		if (sTab != ''){
//			var obj = frameSetTransacao.Dados.document.getElementById(sTab);
			var obj = document.getElementById(sTab);
			if (obj) {
				obj.style.visibility = "visible";
				obj.style.display = "block";
				obj.click();
			}
		}
	}

	gsTabAnt = sTab
	
	for (i=0;i<this.Elem.length;i++){
		if(this.Elem[i].id==sTab){
			this.Elem[i].estadoImagem=1
			this.Elem[i].eventomouse(3)
		}else{	
			if(this.Elem[i].estadoImagem==1){
				this.Elem[i].estadoImagem=0
				this.Elem[i].eventomouse(0)
			}
		}
	}
	
	if (this.oAcaoTrocouAba != null) {
		this.oAcaoTrocouAba(sTab);
	}	

	//eval(this.frame+ ".scrollTo(0,0)");
	
}

/******
	Habilita ou desabilita um determinado objeto
	Parâmetro: id= id do botao/aba
			   valor= true (habilita) ou false (desabilita)
*******/
function botSetItemHab(id, valor){
	if (id=="SEPARADOR"){
		return
	}
	
	for (i=0; i<this.Elem.length; i++){
		if (this.Elem[i].id==id){

			if (valor){
				this.Elem[i].estadoImagem = 0
			}else{
				this.Elem[i].estadoImagem = 2
			}
			this.Elem[i].eventomouse(0)
			return
		}
	}
	
	alert("Erro. Não foi possível " +((valor)?"habilitar":"desabilitar")+ " o itemID=" +id)
}

/******
	Seta o container para todos os itens de um objeto
	Parâmetro: frame= nome do frame
	obs: usado geralmente para janelas auxiliares
******/
function botSetFrame(frame){
	if (frame==null || frame==""){
		frame = "frameSetTransacao.Dados"
	}
	// setando o container do objeto que contém o array de itens
	this.frame = frame 
	
	for (i=0; i<this.Elem.length; i++){
		this.Elem[i].frame = frame;
	}
}

/******
	Seta o container para todos os itens de um objeto
******/
function botSetFrameDados(){
	this.setFrame("frameSetTransacao.Dados");
}


/****
	Busca o container do primeiro
*****/
function botGetFrame(){
	return this.frame
}



/***
	Função que seta no objeto botao do frame de Ações
	Parâmetros: 1) objBotao - objeto que contém o deck de botões 
****/
function setBotaoFrameAcoes(objBotao){
	objBotao.setFrame("frameSetTransacao.Acoes")
	frameSetTransacao.Acoes.oBotoes = objBotao
}


function getBotaoFrameAcoes(){
	return frameSetTransacao.Acoes.oBotoes
}

/***
	Função que seta no objeto aba do frame de Ações
	Parâmetros: 1) objAba - objeto que contém o deck de abas
****/
function setAbaFrameAcoes(objAba){
		frameSetTransacao.Acoes.oAbas = objAba
}
function getAbaFrameAcoes(){
	return frameSetTransacao.Acoes.oAbas
}

/***
	Função que retorna true se o frame de Dados desejar setar novamente o objeto botoes/abas no frame de acoes ou false caso contrário
	Parâmetros: 1) obj - objeto botão/abas
****/
/*function escreveuAcoes(obj){
	if (obj.frame=="Acoes"){
		//somente para abas e os botões que ficam no Ações
		if (obj.tipo=="ABAS"){
			if (parent.gsAbaHref==Dados.document.location.href){
				return true 
			}
			parent.gsAbaHref = Dados.document.location.href
		}else{
			if (parent.gsBotaoHref==Dados.document.location.href){
				return true
			}
			parent.gsBotaoHref = Dados.document.location.href
		}
	}
	return false
}
*/
function setBotoesPadrao(tipoTela, sFrame, bOpcional){
	if (!sFrame) sFrame = "Dados"
	montaBotoesPadrao(this,tipoTela,sFrame,bOpcional);
}

function getAbaSelecionada(){
	return gsTabAnt;
}

function montaBotoesPadrao(oBotao,tipoTela,sFrame,bOpcional){
	var flag = true;
	switch(tipoTela.toUpperCase()){
		case "PESQUISA": 
			oBotao.addItem("novo", "Novo...", "Novo...", "javascript:parent." +sFrame+ ".novo()");
			oBotao.addItem("limpar", "Limpar", "Limpar", "javascript:parent." +sFrame+ ".limpar()");
			oBotao.addItem("ok", "OK", "OK", "javascript:parent." +sFrame+ ".ok()");
			oBotao.addItem("SEPARADOR");
			oBotao.addItem("ajuda", "Ajuda", "Ajuda", "javascript:parent." +sFrame+ ".ajuda()");
			break;
		case "LISTA": 
			oBotao.addItem("novo", "Novo...", "Novo...", "javascript:parent." +sFrame+ ".novo()"); 
			oBotao.addItem("excluir", "Excluir", "Excluir", "javascript:parent." +sFrame+ ".excluir()"); 
			oBotao.addItem("pesquisar", "Pesquisar...", "Pesquisar...", "javascript:parent." +sFrame+ ".pesquisar()");
			oBotao.addItem("limpar", "Limpar", "Limpar", "javascript:parent." +sFrame+ ".limpar()");
			oBotao.addItem("SEPARADOR");
			oBotao.addItem("imprimir", "Imprimir", "Imprimir", "javascript:parent." +sFrame+ ".imprimir()"); 
			oBotao.addItem("ajuda", "Ajuda", "Ajuda", "javascript:parent." +sFrame+ ".ajuda()"); 
			break;
		case "CONSULTA": //1 vez
			oBotao.addItem("novo", "Novo...", "Novo...", "javascript:parent." +sFrame+ ".novo()"); 
			oBotao.addItem("pesquisar", "Pesquisar...", "Pesquisar...", "javascript:parent." +sFrame+ ".pesquisar()"); 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			oBotao.addItem("SEPARADOR");
			oBotao.addItem("imprimir", "Imprimir", "Imprimir", "javascript:parent." +sFrame+ ".imprimir()"); 
			oBotao.addItem("ajuda", "Ajuda", "Ajuda", "javascript:parent." +sFrame+ ".ajuda()"); 
			break;
		case "EDICAO": 
			oBotao.addItem("novo", "Novo...", "Novo...", "javascript:parent." +sFrame+ ".novo()"); 
			oBotao.addItem("salvar", "Salvar", "Salvar", "javascript:parent." +sFrame+ ".salvar()"); 
			oBotao.addItem("excluir", "Excluir", "Excluir", "javascript:parent." +sFrame+ ".excluir()"); 
			oBotao.addItem("pesquisar", "Pesquisar...", "Pesquisar...", "javascript:parent." +sFrame+ ".pesquisar()"); 
			oBotao.addItem("limpar", "Limpar", "Limpar", "javascript:parent." +sFrame+ ".limpar()");
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			oBotao.addItem("SEPARADOR");
			oBotao.addItem("imprimir", "Imprimir", "Imprimir", "javascript:parent." +sFrame+ ".imprimir()"); 
			oBotao.addItem("ajuda", "Ajuda", "Ajuda", "javascript:parent." +sFrame+ ".ajuda()"); 
			break;
		case "NOVO": 
			oBotao.addItem("salvar", "Salvar", "Salvar", "javascript:parent." +sFrame+ ".salvar()"); 
			if (bOpcional) {oBotao.addItem("salvarenovo", "Salvar e Novo", "Salvar e Novo", "javascript:parent." +sFrame+ ".salvarENovo()");}
			oBotao.addItem("pesquisar", "Pesquisar...", "Pesquisar...", "javascript:parent." +sFrame+ ".pesquisar()"); 
			oBotao.addItem("limpar", "Limpar", "Limpar", "javascript:parent." +sFrame+ ".limpar()"); 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			oBotao.addItem("SEPARADOR");
			oBotao.addItem("imprimir", "Imprimir", "Imprimir", "javascript:parent." +sFrame+ ".imprimir()");
			oBotao.addItem("ajuda", "Ajuda", "Ajuda", "javascript:parent." +sFrame+ ".ajuda()"); 
			break;
		case "AUXLISTA":
			oBotao.addItem("adicionar", "Adicionar", "Adicionar", "javascript:parent." +sFrame+ ".adicionar()"); 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			break;
		case "AUXLISTAMULT":
			oBotao.addItem("adicionar", "Adicionar", "Adicionar", "javascript:parent." +sFrame+ ".adicionar()"); 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			break;

		case "AUXASS": 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			break;
		case "AUXCAD": 
			oBotao.addItem("adicionar", "Adicionar", "Adicionar", "javascript:parent." +sFrame+ ".adicionar()"); 
			oBotao.addItem("fechar", "Fechar", "Fechar", "javascript:parent." +sFrame+ ".fechar()"); 
			break;
		default:
			flag = false;
			alert("Erro. Deve ser informado tipo de tela nesse formato: [Pesquisa] | [Consulta] | [Lista] | [Novo] | [Edicao] | [AuxLista] | [AuxListaMult] | [AuxAss] | [AuxCad]")
	}
	if (flag) setBotaoFrameAcoes(oBotao);
}

function setHabilitaDeck(valor){
	for (var i=0; i<this.Elem.length; i++){
		this.setItemHab(this.Elem[i].id, valor)
	}
}

/*
	Tem como objetivo guardar o estado de um botao/aba. Usado geralmente para telas onde se chama um relacionamento, onde se 
	desabilita os componentes do frame acoes, mas ao retornar para a tela que chamou o relacionamento, deve-se voltar ao estado
	atual.
*/
/*function congelaEstado(){
	for (var i=0; i<this.Elem.length; i++){
		this.itens[i] = new Object();
		this.itens[i].estado = this.Elem[i].estadoImagem;
	}
}
*/
/*
function descongelaEstado(){
	var estado = 0;
	
	for (var i=0; i<this.itens.length; i++){

		if (this.Elem[i].id != "SEPARADOR"){ //separador é ignorado
			this.Elem[i].estadoImagem = this.itens[i].estado;
			this.itens[i] = null
	
			estado = this.Elem[i].estadoImagem;
			this.itens[i] = null;
			switch (estado){ //apresenta conforme o estado
				case 0: this.Elem[i].eventomouse(0); break; //botao off
				case 1: this.Elem[i].eventomouse(3); break; //botao on
				case 2: this.Elem[i].eventomouse(6); break; //botao des
			}
		}
	}
}
*/

//Seta se o frame de navegacao vai usar um logo
function usaLogoNavegacao(valor){
	if (valor){
		//Ícones do frame de navegação
		oLogo = new Logo("parent.oLogo","IcLogoNavegacao");//nome do logo padronizado
		oLogo.setFrame('frameNavegacao');
	}
}

function clearLayers(){
	frameSetTransacao.Geral.document.body.innerHTML = "";
}

/*
	Retorna o conteúdo da div salva no frame geral e restaura para o frame de dados
	Colocar no evento onLoad da página: top.getLayer('DadosObjeto1');
 */
function getLayer(id){
	if (frameSetTransacao.Geral.document.getElementById(id)!=null){
		var outerHTML = frameSetTransacao.Geral.document.getElementById(id).outerHTML;
		frameSetTransacao.Geral.document.getElementById(id).outerHTML = null //elimina a div do frame geral
		frameSetTransacao.Dados.document.getElementById(id).outerHTML = outerHTML; //restaura no frame de dados
	}
}

function saveLayer(id, innerHTML){
	if (frameSetTransacao.Geral.document.getElementById(id)==null){
		frameSetTransacao.Geral.document.body.innerHTML += innerHTML;
	}else{
		frameSetTransacao.Geral.document.getElementById(id).outerHTML = innerHTML
		return true;
	}
}

/*
	Busca os elementos encontrados nas divs das abas escondidas no frame geral
*/
function getFormCache(name){
	var elems = new Array();
	var oForm = document.createElement("Form");
	oForm.name = name
	saveLayer(gsTabAnt,frameSetTransacao.Dados.document.getElementById(gsTabAnt).outerHTML); //coloca a aba atual no frame geral
	
	for (var i=0; i<this.Elem.length; i++){ //percorre os layers
		var layer = frameSetTransacao.Geral.document.getElementById(this.Elem[i].id); //pega cada aba a partir do ID
		if (layer != null){ //soh entra se layer tiver sido alterado
			var forms = layer.document.forms //colecao de forms
			for (var iform=0; iform<forms.length; iform++){ //percorre todos os forms a procura dos elements
				//obs: comeca em 1 por que o 0 e 1 representam a mesma coisa...
				var elementsIt = forms[iform].elements; //colecao de elements
				for (var j=0; j<elementsIt.length; j++){
				   oForm.elements[i+j] = forms[iform].elements[j].cloneNode(true); //popula o array com os elements
				}
			}
		}
	}
	return oForm
}

