//Chama Classe

function abreFecha(e,id,arq,acao)
{
	win = new WinControl(e, id, arq);
	if(acao) 
	{ 
		//Aqui decidimos, se arq vem com pos de javaExec fazemos uma request para javaExec, caso contrario aplicamos o metodo genWin.
		if(arq.indexOf('javaExec')<0)
		{
			win.genWin(); 
		}else{
			win.genWin(); 
			//Pegamos a contagem de janelas aberta retornado pelo próprio objeto. Com isso conseguimos determinar a z-index da janela e a caixa container alvo para os dados
			var abertas = win.countWins;
			//Pegamos a pos do javaExec passado em arq
			var posExec =  parseInt(arq.substr(9,10));
			var params = arq.substr(11)+','+abertas; //concatenamos os numeros de janelas para decisao de innerHTML
			//Montamos o comando javaExec;
			javaExec(posExec,params);
		}
	} else { 
		//javaExec(3,0);
		win.closeWin();
	} 
}

//Classe
function WinControl(e, id,arq)
{
	//a z-index das janelas comeca em 200
	
	//Propriedade que captura o evento da página para IE e FF
	this.evOb = (window.event) ? event : e;
	//Propriedade que captura o id do elemento clicado. Isso nos serve para navegar nos parent childs e descobrir a janela atual
	this.idOb = document.getElementById(id);
	//Pegamos o corpo da página;
	this.corpoOb = document.getElementsByTagName('body')[0];
	this.arq = arq;
	//Vamos pegar as coordenadas do click
	var posX = 0;
	var posY = 0;
	//Tratamento para FF
	if (this.evOb.pageX || this.evOb.pageY) 	
	{
		posX = this.evOb.pageX;
		posY = this.evOb.pageY;
	//Tratamento para IE	
	}else if (this.evOb.clientX || this.evOb.clientY) {
		//document.body é processado caso não tenha a declaração <!DOCTYPE> caso exista então é processado documentElement
		posX = this.evOb.clientX + document.body.scrollLeft+ document.documentElement.scrollLeft;
		posY = this.evOb.clientY + document.body.scrollTop+ document.documentElement.scrollTop;
	}
	//Vamos checar se existe e qtas seriam as janelas existentes na tela
	var divsEl = document.getElementsByTagName('div');
	this.countWins = 0;
	for(d=0;d<divsEl.length;d++)
	{
		//Vamos pegar somente divs com ids
		var divAttr = divsEl[d].attributes;
		if(divAttr.getNamedItem('id') != null)
		{
			//Agora pegamos a que contiver o id popWin independente do valor do incremento
			if(divAttr.getNamedItem('id').value.substr(0,6) == 'popWin')
			{
				//Vamos contar as janelas existentes
				this.countWins++;
			}
		}
	}

	this.genWin = function ()
	{
		//Camada de controle para evitar a geracao de janelas caso um link ja tenha sido clicado e sua janela aberta 
		var openWins = 	document.getElementById('openWins').value;
		var relValue = document.getElementById(id).rel;
		if(openWins.indexOf(relValue) == -1)
		{
			//Vamos registrar a abertura da janela e o clique no link. Para isso escrevemos o conteudo do atributo rel presente no link pois esse pode repetir-se o o id nao. Caso já exista o link clicado em nossa memoria emitimos um tooltip com a informacao de que a janela ja foi carregada
			document.getElementById('openWins').value = (openWins == '') ? relValue : document.getElementById('openWins').value+', '+relValue;
			
			//Vamos criar uma janela
			var obWin = document.createElement('div');
			obWin.setAttribute('id','popWin'+this.countWins)
			//Nomes dos ids internos
			var idLay = 'winLay'+this.countWins;
			var idTxt = 'winTxt'+this.countWins;	
			var lkClose = 'lkClose'+(this.countWins+1);
			var largura = (760-((this.countWins+1)*20));
			var imgDest = (window.navigator.appName == 'Microsoft Internet Explorer') ? 'backWinMioloIE' : 'backWinMiolo';
			conteudo = '<div id="'+idLay+'" class="">';
        	conteudo += '	<img src="../Figure/site/barWinTop'+this.countWins+'.png" alt="" height="21" class="mIE" width="'+largura+'" />';
            conteudo += '	<img  height="15" width="27"  id="btClose'+this.countWins+'" src="../Figure/site/btFecharWin.png" alt="" class="floatRight posRel corrigeBtFechar cursorP" onclick="abreFecha(event,this.id, \'\',0)"  />'; 
            conteudo += '	<div style="background:url(../Figure/site/'+imgDest+this.countWins+'.png) repeat-y;" class="winTxt">';
            conteudo += '	<div id="'+idTxt+'" class="minH2 winPtop"><img src="../Figure/site/loading.gif" alt="" style="margin:150px 0px 0px 100px" /></div>';			
            conteudo += '	<div class="winPBottomSmall corrigeP19">  	';
            conteudo += '	  <a id="lkClose'+this.countWins+'" class="disBlock cor1 corrigeTit1 floatRight cursorP textSub" onclick="abreFecha(event,this.id,\'\',0)"  rel="none">close</a>';
            conteudo += '	</div>';
            conteudo += '	</div>';
            conteudo += '	<img src="../Figure/site/barWinBottom'+this.countWins+'.png" alt=""  height="21" width="'+largura+'"  />';
        	conteudo += '</div>';
			obWin.innerHTML = conteudo;
						
			//Cada janela aberta é 10px de cada lado menor
			obWin.style.position = 'absolute';
			obWin.style.left = '50%';
			//Usamos 10px para gerar uma folga de janela
			obWin.style.top = posY+10+'px';
			obWin.style.marginLeft = '-'+((760-((this.countWins+1)*20))/2)+'px';		
			if(this.countWins)
			{
				//Janelas secundárias
				obWin.style.zIndex = 200+this.countWins;
				obWin.style.width = 760-((this.countWins+1)*20)+'px';	
			}else{
				//Primeira janela
				obWin.style.zIndex = 200;
				obWin.style.width = 760-(20)+'px';				
			}
			this.corpoOb.appendChild(obWin);
			
			//Vamos fazer uma requisicao ajax para colocar um conteudo de arquivo externo
			
			//Vamos proceder uma distincao: se o argumento arq informado contiver .htm ou .html é porque trata-se de um arquivo e deve ser feito o ajax para um conteudo externo, caso contrário carrega-se o conteudo aqui informado diretamente
			if(arq.indexOf('.html')>0 || arq.indexOf('.htm')>0)
			{
				request = (window.XMLHttpRequest) ? new XMLHttpRequest()  :  
																				(window.ActiveXObject) ? new 
																				ActiveXObject("Microsoft.XMLHTTP") : false ; 
				request.open("GET",arq,true);
				request.onreadystatechange=function()  
				{ 
					if (request.readyState==4)  
					{ 
						document.getElementById(idTxt).innerHTML = request.responseText.replace(/lkRpl/g, lkClose); 
					} 
				} 
				request.send(null); 
			}else{
				//Garantimos que o parametro passado nao é de javaExec e sim um conteudo qq.
				if(arq.indexOf('javaExec')<0)
				{
					document.getElementById(idTxt).innerHTML = arq; 
				}
			}
		}//fecha criacao da janela
		
		//Aqui aplicamos o tooltip
		javaExec(9,'');
		//Aplica chamada para criacao de targets blank
		javaExec(10,'');
	}
	
	this.closeWin = function ()
	{
		if(id.substr(0,7) == 'btClose' || id.substr(0,7) == 'lkClose')
		{
			var nWin = parseInt(id.substr(7,2));
			//Para close all windows podemos usar (r=nWin; r>-1; r--)
			var nDeletes = (this.countWins != 0) ? this.countWins-nWin : this.countWins;
			for(r=0; r<nDeletes; r++)
			{
			//alert('popWin'+((this.countWins-r)-1))
				var winRemove = document.getElementById('popWin'+((this.countWins-r)-1));
				this.corpoOb.removeChild(winRemove);
				//Vamos tornar os links clicáveis novamente. Para isso removemos do campo hidden aqueles cujas janelas já foram fechadas.
				var openWins = 	document.getElementById('openWins').value.split(',');
				var stillOpen = (openWins.splice(0,(this.countWins-r)-1));
				document.getElementById('openWins').value = stillOpen.join(',');
			}
		}
	}
	
	
}


/* Melhorias
A contagem de janelas abertas poderia ser um metodo
Os parametros passados na classe poderiam ser passados tematicamente metodo a metodo

*/
