/**
 * @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'))
				limpaDiv('popup', 1);
			if(objExiste('divAlerta'))
				limpaDiv('divAlerta', 1);
		}
	}
}
else{
	function menuengine(e){
		if (event.keyCode == 27){
			if(objExiste('popup'))
				limpaDiv('popup', 1);
			if(objExiste('divAlerta'))
				limpaDiv('divAlerta', 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>Ótica Modelo - Impressão</title></head><link href='../includes/estilos.css' rel='stylesheet' type='text/css' media='screen'><link href='../includes/estilos_impressao.css' rel='stylesheet' type='text/css' media='print'><body>";
	var conteudoImpressao2 = document.getElementById(divImprimir).innerHTML;
	conteudoImpressao2 = conteudoImpressao2.replace("OVERFLOW: auto;"," ");
	var conteudoImpressao3 = "</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.\n\nSó clique no OK desta tela após a tela de impressão ser exibida!");
	window.iPrint.close()
}

//===> FUNÇÃO PRA REMOVER TUDO Q NÃO FOR NUMERO/LETRA E JOGAR TUDO PARA MINUSCULO. BOM PRA CAMPOS DE LOGIN E SENHA!
function lowerAlfaNum(str){
	var tmp;
	var er = /[^\w]/gi;
	str = str.toLowerCase();
	tmp = str.replace(er,"");
	return tmp;
}

//===> FUNÇÃO LEFT, ASSIM COMO É A DO ASP
function left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

//===> FUNÇÃO RIGHT, ASSIM COMO É A DO ASP
function right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

/*
 *
 *Função que gera senha com letra e número aleatoriamente
 *Forma de chamar: geraSenha(TAMANHO DA SENHA, 'l' ou 'u' - Lowecase ou Uppercase);
 *Retorna uma string
 *
 */
function geraSenha(tam, charCase){
	var senha;
	senha = "";

	for(i = 0; i < tam; i++)
		senha += (i % 2 == 0 ? geraChar(charCase) : geraNum(10));
	
	return senha;
}

/*
 *
 *Função que gera uma letra aleatoriamente
 *Forma de chamar: geraChar('l' ou 'u' - Lowecase ou Uppercase);
 *Retorna uma string
 *
 */
function geraChar(charCase){
	var charRand;
	var aux;

	//Caracter aleatório: a - z
	aux = Math.random();
	aux *= 25;
	aux += (charCase == 'l') ? 65 : 97;
	aux = Math.floor(aux);
	charRand = String.fromCharCode(aux);
	
	return charRand;
}

/*
 *
 *Função que gera número aleatoriamente
 *Forma de chamar: geraNum(MAIOR NÚMERO);
 *Retorna uma string
 *
 */
function geraNum(maximo){
	var numRand;

	//Número aleatório: 0 - 9
	numRand = Math.random();
	numRand *= maximo;
	numRand = Math.floor(numRand);
	
	return numRand;
}

/*
*
*
*Função que remove tudo que não for número
*
*
*/
function soNumero(str){
	var tmp;
	var er = /[^\d]/gi;
	tmp = str.replace(er,"");
	return tmp;
}

/**
*Função que troca a vírgula por ponto
**/
function trocaVirgula(str){
	var tmp;
	var er = /[',']/gi;
	tmp = str.replace(er,".");
	return tmp;
}

/*
 *
 *Função para resetar formulário quando se utiliza jquery
 *Sabe-se lá porque, mas o jquery não permite o uso de $('#form').reset();
 *Então o jeito é usar essa função.
 *Basta passar o id do form entre aspas simples.
 *Exemplo: resetFormJQuery('idDoForm');
 *
 *
 *
*/