/**
 * @author Agência Interagir - Departamento de Programação
 */

/*
 * 
 * Variável global que verifica se o browser utilizado é IE ou não
 * Forma de utilizar:
 * if(ie){CÓDIGO A SER EXECUTADO NO IE}
 * else{CÓDIGO A SER EXECUTADO NOS OUTROS BROWSERS}
 * 
 * Retorna boolean
 * 
 */
var ie = document.all;

/*
 * 
 * Comando global para habilitar a remoção da lightbox (popup) com o pressionamento da tecla ESC
 * 
 * IMPORTANTE:
 * 
 * 1 - A div que será exibida como lightbox deverá possuir OBRIGATORIAMENTE a id "popup"
 * Caso contrário não será atribuída a ela a possibilidade de ser encerrada com o pressionamento do ESC
 * 2 - A função "limpa_div" que é referenciada na função menuengine, para encerramento da lightbox (popup)
 * se encontra no arquivo classeAjax.js, na mesma pasta onde se encontra o util.js
 * É OBRIGATÓRIO referenciar o arquivo classeAjax.js no documento onde for usado o util.js
 * Caso não seja referenciado no HTML o classeAjax.js, ocorrerá um erro quando o ESC for pressionado
 * 
 */
if(!ie)
	document.captureEvents(Event.KEYPRESS)

if(!ie){
	function menuengine(event){
		if(event.keyCode == 27)
			if(objExiste('popup'))
				limpa_div('popup', 1);
	}
}
else{
	function menuengine(e){
		if (event.keyCode == 27)
			if(objExiste('popup'))
				limpa_div('popup', 1);
	}	
}

document.onkeypress=menuengine;

//Fim da função de fechamento de lightox(popup) com ESC

/*
 * 
 * Função que captura o maior z-index de todas as divs do documento
 * Forma de chamar:
 * maxZ() -> Não possui argumentos
 * Retorna um valor inteiro
 * 
 */
function maxZ(){
	var max = 0;
	
	for(d = 0; d < document.getElementsByTagName('div').length; d++)
		max = (eval(document.getElementsByTagName('div')[d].style.zIndex)>max?eval(document.getElementsByTagName('div')[d].style.zIndex):max);
	
	return max + 1;
}

/*
 * 
 * Função que dá um pause na execução de uma função qualquer na qual ela seja chamada
 * Forma de chamar:
 * pause(QUANT DE MILISSEGUNDOS EM ESPERA)
 * Não possui retorno (void)
 * 
 */
function pause(millis){
	var date = new Date();
	var curDate = null;
	
	do{
		curDate = new Date();
	}while(curDate - date < millis);
}

/*
 * 
 * Função que verifica se um objeto existe na página através do seu id
 * Forma de chamar:
 * objExiste(STRING)
 * Retorna boolean
 * 
 */
function objExiste(obj){
	return (document.getElementById(obj) != null)
}

/*
 * 
 * Função utilizada para zerar (limpar) um array
 * Forma de chamar:
 * limpaArray(NOME DO VETOR)
 * Não possui retorno (void)
 * 
 */
function limpaArray(vet){
	var i;
	
	for(i = 0;i <= vet.length; i++)
		vet.shift();
}

/*
 * 
 * Função utilizada para retornar o último nó de uma div (divs existentes dentro de uma outra div)
 * Forma de chamar:
 * ultimaDiv(ID DA DIV)
 * Retorna string (id da div)
 * 
 */
function ultimaDiv(divContainer){
	var d;
	d = document.getElementById(divContainer);
	
	if(d.hasChildNodes())
		return d.lastChild.id;
	else
		return "Erro";
}

/*
 * 
 * Função utilizada para manipular o efeito de "fade" (esmaecimento) da div
 * Forma de chamar:
 * fade(ID DA DIV, TEMPO EM SEGUNDOS)
 * Não possui retorno (void)
 * IMPORTANTE: Para que a função fade funcione corretamente, é necessário que a div de alvo
 * possua o atributo visibility configurado como hidden ou visible no atributo style.
 * 
 */
function fade(x, y){
	var el = document.getElementById(x);
	var vis = el.style.visibility;
	if(vis == "visible")
		fadeOut(x, y);
	else{
		el.style.visibility = "visible";
		fadeIn(x, y);
	}
}

/*
 * 
 * Função responsável pelo esmaecimento (fade) da div até que ela desapareça
 * Forma de chamar:
 * fadeOut(ID DA DIV, TEMPO EM SEGUNDOS)
 * Não possui retorno (void)
 * 
 */
function fadeOut(id, time) {
	target = document.getElementById(id);
	alpha = 100;
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (alpha <= 0){
					clearInterval(i);
					target.style.visibility = "hidden";
				}
				
				setAlpha(target, alpha);
				alpha -= 2;
			}, timer);
}

/*
 * 
 * Função responsável pelo esmaecimento (fade) da div até que ela apareça
 * Forma de chamar:
 * fadeIn(ID DA DIV, TEMPO EM SEGUNDOS)
 * Não possui retorno (void)
 * 
 */
function fadeIn(id, time) {
	target = document.getElementById(id);
	alpha = 0;
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (alpha >= 100)
					clearInterval(i);
				setAlpha(target, alpha);
				alpha += 2;
			}, timer);
}

/*
 * 
 * Função que altera a transparência (alpha) da div
 * Forma de chamar:
 * setAlpha(ID DA DIV, TEMPO EM SEGUNDOS)
 * Não possui retorno (void)
 * 
 */
function setAlpha(target, alpha) {
	target.style.filter = "alpha(opacity="+ alpha +")";
	target.style.opacity = alpha/100;
}

/*
 * 
 * Função que retorna a altura configurada no height do atributo style
 * Forma de chamar:
 * altura(ID DO OBJETO)
 * Retorna inteiro
 * 
 */
function altura(obj){
	var el = document.getElementById(obj);
	var h = el.style.height;
	
	if(h != ""){
		var altura = eval(h.replace("px",""));
		return altura;		
	}
	return 0;

}

/*
 * 
 * Função responsável pelo deslizamento (slide) da div, para aparecer ou desaparecer
 * Forma de chamar:
 * slide(ID DA DIV, TEMPO, VALOR ESTIPULADO NO ATRIBUTO HEIGHT DA DIV [entre aspas], BOOLEAN PARA EXECUÇÃO DO FADE)
 * Não possui retorno (void)
 * IMPORTANTE: Para que a função fade funcione corretamente, é necessário que a div de alvo
 * possua o atributo visibility configurado como hidden ou visible no atributo style.
 * 
 */
function slide(x, y, maxSize, fadeIt){
	if(fadeIt)
		fade(x,0.01);
		
	var el = document.getElementById(x);
	var altura = el.style.height;
	altura = altura.replace("px","");

	if(altura == "0")
		slideIn(x, y, maxSize);
	else{
		slideOut(x, y, maxSize);
	}
}

/*
 *
 * Função responsável pelo deslizamento (slide) da div para desaparecer
 * Forma de chamar:
 * slideOut(ID DA DIV, TEMPO, VALOR ESTIPULADO NO ATRIBUTO HEIGHT DA DIV [entre aspas])
 * Não possui retorno (void)
 * 
 */
function slideOut(id, time, maxSize) {
	target = document.getElementById(id);
	size = eval(maxSize.replace("px",""));
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (size <= 0){
					clearInterval(i);
				}
				
				setSize(target, size);
				size -= 10;
			}, timer);
}

/*
 *
 * Função responsável pelo deslizamento (slide) da div para aparecer
 * Forma de chamar:
 * slideOut(ID DA DIV, TEMPO, VALOR ESTIPULADO NO ATRIBUTO HEIGHT DA DIV [entre aspas])
 * Não possui retorno (void)
 * 
 */
function slideIn(id, time, maxSize) {
	target = document.getElementById(id);
	size = 0;
	maxSize = eval(maxSize.replace("px",""));
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (size >= maxSize)
					clearInterval(i);
				setSize(target, size);
				size += 10;
			}, timer);
}

/*
 * 
 * Função que altera a altura da div
 * Forma de chamar:
 * setSize(ID DA DIV, NOVO TAMANHO)
 * Não possui retorno (void)
 * 
 */
function setSize(target, size) {
	target.style.height = size + "px";
}

/*
 * 
 * Função que verifica se a tecla Enter foi pressionada
 * Forma de chamar:
 * pressEnter(EVENTO, FUNÇÃO A SER EXECUTADA)
 * Não possui retorno (void)
 * Observação: o comando para chamar a função a ser executada deve estar entre aspas
 * 
 */
function pressEnter(evento, funcaoExecutar){
	evento = (document.all) ? evento.keyCode : evento.which;
	if(evento == 13){
		setTimeout(funcaoExecutar,1);
	}
}

//===> CRIANDO UMA MASCARA PARA DATA
function mascaraData(idCampo, evento){
	if(evento == "click")
		evento = 13
	else
		evento = (document.all) ? evento.keyCode : evento.which
	if(evento != 8 && evento != 46){
		var idCampo = document.getElementById(idCampo);
		if(idCampo.value.length == 2 || idCampo.value.length == 5)
			if(evento != 47)
				idCampo.value = idCampo.value + "/"
	}
}

//===> SEPARANDO A DATA EM DIA, MES E ANO
function separaData(valorData){
	var barraDia = valorData.indexOf("/");
	dtDia = valorData.substr(0, barraDia);
	var barraMes = valorData.substr(barraDia + 1).indexOf("/");
	dtMes = valorData.substr(barraDia + 1).substr(0, barraMes);
	var barraAno = valorData.substr(barraMes + 1).indexOf("/");
	dtAno = valorData.substr(barraMes + 1).substr(barraAno + 1);
}

function validaData(idCampo){
	idCampo = document.getElementById(idCampo);
	if(idCampo.value.length > 0){
		separaData(idCampo.value);
		//===> VERIFICANDO SE A DATA É VALIDA
		if(eData(dtDia, dtMes, dtAno) == false){
			alert("Data inválida!\nPor favor, informe a data novamente.");
			idCampo.focus();
			idCampo.value = "";
			return false
		}
	}
}

//===> IMPRIMINDO O CONTEUDO DE UMA DIV
function imprimirDiv(divImprimir){
	var conteudoImpressao1 = "<html><head><title>ABMAPRO IMPRESSÃO</title></head><link href='../css/estilos.css' rel='stylesheet' type='text/css'  media='print'><body><p align='justify'>";
	var conteudoImpressao2 = document.getElementById(divImprimir).innerHTML;
	conteudoImpressao2 = conteudoImpressao2.replace("OVERFLOW: auto;"," ");
	var conteudoImpressao3 = "</p></body></html>";
	//===> ENVIANDO O CONTEUDO HTML DO RELATORIO PARA A JANELA DE IMPRESSAO
	iPrint = window.open("", "", "width=10, height=10");
	iPrint.document.write(conteudoImpressao1 + conteudoImpressao2 + conteudoImpressao3);
	imprimirDivOk()
}

//===> IMPRIMINDO A DIV
function imprimirDivOk(){
	iPrint.history.go();
	window.iPrint.print();
	alert("NOTA: Aguarde alguns segundos até que a tela de impressão seja exibida!");
	window.iPrint.close()
}
