/**
 * Executa rotinas de iniciação da página.
 * @author Davi R. Tavares
 */
function initPage() {
	var selects = document.getElementsByTagName("SELECT");

	
	for (var i = 0; i < selects.length; i++) {
		var s = selects[i];
	
		s.oldOnChange = selects[i].onchange;
		s.oldOnClick = selects[i].onclick;

		s.onchange = function() {
			var ro = $(this).readAttribute("readonly");

			if ((ro == "readonly") || (ro == "true")) {
				this.selectedIndex = this.oldSelectedIndex;
			}
			else {
				if (this.oldOnChange) this.oldOnChange();
			}
		};
		
		s.onclick = function() {
			this.oldSelectedindex = this.selectedIndex;

			if (this.oldOnClick) this.oldOnClick();
		};

		s.oldSelectedIndex = s.selectedIndex;
	}

	if (opcBusca != "") {
		showSearchOption(opcBusca);
	}
}
/**
 * Função para exibir/esconder o campo da opção de busca
 * @author Ianko Leite
 * @param obj : Objeto que gerou a ação
 */
function showRow(obj) {
	showSearchOption(obj.id);
	window.campoBusca = obj.value;
}
/**
 * Complementar a showRow(), recebe apenas o id da opção.
 * @author Davi R. Tavares
 * @param opt - o id da opção.
 */
function showSearchOption(opt) {
	// seleciona radiobutton correspondente
	var r = $(opt);
	
	if (! r) return;
	
	r.checked = "checked";
	window.opcBusca = opt;
	var opcoes = $("opcoes");

	if (opcoes) {
		// pecorre as opções que existem dentro da div#opcoes
		for (var i = 0; i < opcoes.childNodes.length; i++) {
			// se tem nós dentro da opção
			if (opcoes.childNodes[i].hasChildNodes()) {
				// se a opção selecionada for igual a opção que está sendo pecorrida
				if (opcoes.childNodes[i].id == opt + "_Div") {
					// mostra a opção
					opcoes.childNodes[i].style.display = "block";
				}
				else {
					// esconde a opção
					opcoes.childNodes[i].style.display = "none";
				}
			}
		}
	}
}
/**
 * Função para enviar dados via post
 * @author Ianko Leite, David Araújo, Davi Ramos
 * @param name : Atributo name para o input hidden
 * @param value : Atributo value para o input hidden
 * @param action : Atributo action para o form
 */
function goTo(name, value, action, acao) {
	name = name.split(";");
	value = value.split(";");
	var form = document.forms["alterar"];
	var inpAcao = form.elements["acao"];
	
	inpAcao.value = acao ? acao : "buscar";

	for (var j = 0; j < name.length; j++) {
		var id = "inp" + ((j > 0) ? j : "");
		var inp = $(id);

		if (inp == null) {
			inp = document.createElement("input");
			inp.id = id;
			inp.type = "hidden";
			form.appendChild(inp);
		}

		inp.name = name[j];
		inp.value = value[j];
	}

	if (action) form.action = action;

	form.submit();
}
function edit(name, value) {
	// funcionalidade de edit englobada por goTo
	goTo(name, value, null, "alterar");
}
function light(tr,show){

	var td     = tr.getElementsByTagName('td');
	var qtd_td = td.length;
	
	var corNormal = tr.style.backgroundColor;
	var corLight = "#dddddd";
	
	for(var i=0; i < qtd_td; i++) {
		if ( show == 1 ) {
  		td[i].style.backgroundColor = corLight;
  		td[i].style.cursor = "pointer";
  	} else {
  		td[i].style.backgroundColor = corNormal;
  		td[i].style.cursor = "default";
  	}
  }
}
function paginar(p){
	if (window.opcBusca != undefined) {
		frm = $(window.opcBusca + "_Frm");
		frm.paginacao.value = p;
		if(typeof frm.onsubmit == "function"){
			frm.onsubmit();
		}
		frm.submit();
	}
}
function get(name,value,acao) {
	var form = document.forms['alterar']
	var inp = $("inp");
	var inpAcao = $("acao");
  
	inpAcao.value = acao;
	inp.name = name;
	inp.value = value;
	//form.action = action;
	form.submit();
}
function addEvent(obj, evType, fn) {
	if (obj.attachEvent) {
		return obj.attachEvent(("on" + evType), fn);
	} else if (obj.addEventListener) {
		return obj.addEventListener(evType, fn, false);
	}
}
function detail(obj,nome,forceValor,personalizedUrl){
	forceValor = (forceValor==undefined) ? true : forceValor;
	
	var url;
	
	// Sair se a janela já estiver criada
	if( $("detail_"+obj.id) != undefined ){
		return;
	}
	
	if( obj.id == undefined ){
		return;
	} else {
		url = "includes/detail_"+obj.id+".php";
	}
	
	/* Rotina para pegar a posição Top e Left de onde foi clicado*/
	var aux = obj;
	var styleTop = aux.offsetTop - 10;
 	while( (aux = aux.offsetParent) != null){
 		styleTop += aux.offsetTop;
 	}
 	aux = obj;
 	var styleLeft = aux.offsetLeft + aux.offsetWidth + 15;
 	while( (aux = aux.offsetParent) != null){
 		styleLeft += aux.offsetLeft;
 	}/*Fim da rotina*/
 	
 	// Cria a DIV da janela
	var div = document.createElement('DIV');
	div.style.position = "absolute";
	div.style.backgroundColor = "#FFF";
	div.style.border = "2px solid #6F2D91";
	div.style.fontSize = "11px";
	div.style.top = styleTop+"px";
	div.style.left = styleLeft+"px";
	div.setAttribute("id","detail_"+obj.id);
	
	// Conteúdo da Janela (div-BarraTop + h3-Titulo )
	div.innerHTML = "<div style='background:#8A50A4;height:24px'> \r\n" +
					"	<h3 style='color:#FFF;padding:5px 30px 5px 10px'>"+nome+"</h3>\r\n" +
					"</div>\r\n";
	// Botão de fechar
	div.innerHTML +="<img src='images/close2.png' style='cursor:pointer;position:absolute;top:1px;right:1px' onclick='closeDetail(\"detail_"+obj.id+"\")' />\r\n";
	// Div que receberá o conteúdo
	div.innerHTML +="<div id='detail_content_"+obj.id+"'></div>";
	
	// Inserir a janela no final do Body
	document.body.appendChild(div);
	
	var valor = "";
	for(var i=0; i<obj.parentNode.childNodes.length; i++) {
		if( obj.parentNode.childNodes[i].tagName == "SELECT" ){
			valor = obj.parentNode.childNodes[i].value;
			break;
		}
	}
	
	if( forceValor ){
		if( valor.length > 0 ){
			url += "?valor="+valor;
			url = (personalizedUrl == undefined) ? url : personalizedUrl;
			ajax_loadContent("detail_content_"+obj.id, url);
		} else {
			$("detail_content_"+obj.id).innerHTML = "<div style='margin:10px'>Selecione um valor em "+nome+"</div>";
		} 
	} else {
		url = (personalizedUrl == undefined) ? url : personalizedUrl;
		ajax_loadContent("detail_content_"+obj.id, url);
	}
	
}
function closeDetail(id){
	if( obj = $(id) ){
		obj.parentNode.removeChild(obj);
	}
}
function ajaxcombo(obj,target,sql){
	target = target.split(',');
	sql = sql.split(',');
	for(var i=0; i<target.length; i++) {
		var targetObj = $(target[i]);
		var carregando = document.createElement('SPAN');
		carregando.id = 'carregando_'+target[i];
		targetObj.parentNode.appendChild(carregando);
		$(targetObj).show();
		ajax_loadContent(target[i],'includes/ajaxcombo.php?valor='+obj.value+'&sql='+sql[i]+'&'+Math.ceil(Math.random()* 1000),'carregando_'+target[i]);
	}
	
}
function ajaxAutocomplete(obj){
	var inputs = document.getElementsByName(obj.name);
	var objName = (obj.name.indexOf("[]")>0)?obj.name.slice(0,-2):obj.name;
	obj.id = objName+inputs.length+1;
	if( document.getElementById('autocomplete_list_'+obj.id) ){
		return;
	} else {
		var lista = document.createElement('DIV');
		lista.id = 'autocomplete_list_'+obj.id;
		lista.className = 'autocomplete_list';
		lista.style.display = 'none';
		obj.parentNode.appendChild(lista);
		new Ajax.Autocompleter(obj,lista.id,'includes/autocomplete_'+objName+'.php', 
			{	minChars: 2,
				indicator: 'carregando',
				afterUpdateElement: ajaxAutoCompleteSelected,
				fullSearch: true,
				partialSearch: false } );
	}
}
function ajaxAutoCompleteSelected(input,li){
	/** TODO */ 
}
function getCodigoAutoComplete(text, li){
    alert (text +"\n"+ li.getAttribute('codigo'));
}
function checkMany(obj,v){
	var div = obj;
	var found = false;
	while(!found){
		div = div.parentNode;
		if( (div.tagName == "TD") || (div.className == "checkmany") ) { found = true }
	}
	
	var inputs = div.getElementsByTagName('INPUT');
	for(var i=0; i<inputs.length; i++) {
		inputs[i].checked = v;
	} 
}
function gridCheckManyClick(cod,showEffect){
	var grid = $('grid_'+cod);
	var bt = grid.tHead.getElementsByTagName('img')[0];
	var display = (bt.className=='botao_minimizar')?'none':'';
	bt.className = (bt.className=='botao_minimizar')?'botao_maximizar':'botao_minimizar';
	if(!showEffect || !($('content'+cod)) ){
		grid.tBodies[0].style.display = display;
	} else {
		if(display==''){
			Effect.BlindDown('content'+cod,{duration:0.5});
		} else {
			Effect.BlindUp('content'+cod,{duration:0.5});
		}
	}
}
function gridCheckManyCollapse(cod){
	var tbody = $('tbody_'+cod);
	
	if( tbody.childNodes.length == 0 ){
		var sep = (location.href.search(/\?/gi)==-1) ? '?' : '&';
		var qs = sep + 'include=true';
		qs += '&cod='+cod;
		qs += '&cdPerfil='+$F('cdPerfil');
		qs += '&rnd='+Math.ceil(Math.random()* 1000);
		ajax_loadContent('tbody_'+cod,location.href+qs);
		gridCheckManyClick(cod,false);
	} else {
		gridCheckManyClick(cod,true);
	}
}
function selecionarPerfil(required) {
	required = (required == undefined) ? false : required;
	
	var janela = showModal(350,500,'Selecione um perfil');
	ajax_loadContent(janela.id,'includes/selecionarperfil.php?'+Math.ceil(Math.random()* 1000));
	
	if( required ){
		$('btCloseJanela').onclick = function(){ 
			if(window.confirm("Para acessar esta tela, é necessário que um perfil esteja selecionado."+
							"\nDeseja ser redirecionado para sua tela inicial?")){
				removeJanela();
				location.href = "./?a=administracao";
			}			
		 };
	}
}
function infoPerfil(cdPerfil){
	var qs = '?rnd='+Math.ceil(Math.random()* 1000);
	if(cdPerfil!=undefined){
		qs += '&cdPerfil='+cdPerfil;
	}
	var janela = showModal();
	ajax_loadContent(janela.id,'telas/infoPerfil.php'+qs);
}
function confirmRedir(text,redir){
	if( (typeof text == "string") && (typeof redir == "string") ){
		var form = document.forms["cadastrar"];
		Event.observe(form, "submit", 
						function(){
							if( window.confirm(text) ){
								var inp = document.createElement("input");
								inp.name = "ignore_redir";
								inp.type = "hidden";
								inp.value = redir;
								form.appendChild(inp);
							}
						}
		);
	}
}
function enviarMailling(){
	var janela = showModal(330,400,undefined,true);
	var qs = "?rnd="+Math.ceil(Math.random()* 1000);
	janela.src = 'includes/mailling_enviar.php'+qs;
}
function solicitarVeiculos(){
	var janela = showModal(255,530,"Solicitar a captura de novos veículos",false);
	var qs = "?rnd="+Math.ceil(Math.random()* 1000);
	ajax_loadContent(janela.id,'includes/solicitaveiculo.php'+qs);
}
function adicionarTodosMultiAdd(obj){
	var multiselect = obj;
	
	var i = 0; // Evita dead-lock
	while(multiselect.className!="multiselect" && i<10){// Lê no máximo, 10 níveis
		multiselect = multiselect.parentNode;
		i++;
	}
	
	var select = multiselect.getElementsByTagName("SELECT")[0];
	var botao = multiselect.getElementsByTagName("BUTTON")[0];
	
	for(i=0;i<select.options.length;i++){
		select.options[i].selected = true;
	}
	botao.click();
}

/**
 * Cross-browser addEvent and removeEvent.
 * @author Carlos R. L. Rodrigues
 * @link http://jsfromhell.com/geral/event-listener [rev. #5]
 * 
 */
addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};
/**
 * Funções de máscara
 * @author Jonas Raoni Soares Silva
 * @link http://jsfromhell.com/forms/masked-input [rev. #1]
 * 
 * Como usar:
 * no onfocus chamar a função MaskInput(f,m)
 * 
 * Exemplos:
 * CNPJ: MaskInput(this,'99.999.999/9999-99');
 * Data: MaskInput(this,'99/99/9999');
 * Letra + Letra sem acento + 2 números + tracinho + qualquer digito + letra: MaskInput(this,'Cc99-*C');
 * Permite qualquer coisa menos a, b ou c: MaskInput(this,'E^abc');
 * Permite somente a, b ou c: MaskInput(this,'O^abc');
 * Somente letras: MaskInput(this,'C^');
 * Somente números: MaskInput(this,'9^');
 * Somente letras e espaços em branco: MaskInput(this,'C^ ');
 * Somente números e as letras a, b e c: MaskInput(this,'9^abc');
 
 */
MaskInput = function(f, m){
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[\xC0-\xFF]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
        	if (c == "\r") return true;
        	
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (
            	(f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ? r.index : l)).length)
            		) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1}){
        addEvent(f, i, mask);
    }
};
