/* Title: Funcoes javascript de uso geral para os mapas interativos da SAGE Contem os metodos de uso geral que permitem contruir os combos de selecao de camadas e outras operacoes dos mapas Arquivo: sage/classe_sage.js Licenca: GPL2 i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet Direitos Autorais Reservados (c) 2006 Ministerio da Saude Desenvolvedor: equipe da SAGE/MS http://189.28.128.178/sage/ Este programa e software livre; voce pode redistribui-lo e/ou modifica-lo sob os termos da Licenca Publica Geral GNU conforme publicada pela Free Software Foundation; Este programa e distribuido na expectativa de que seja util, porem, SEM NENHUMA GARANTIA; nem mesmo a garantia implicita de COMERCIABILIDADE OU ADEQUACAO A UMA FINALIDADE ESPECIFICA. Consulte a Licenca Publica Geral do GNU para mais detalhes. Voce deve ter recebido uma copia da Licenca Publica Geral do GNU junto com este programa; se nao, escreva para a Free Software Foundation, Inc., no endereco 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ /* Class: SAGE (JS) Constroi uma serie de combos que permitem adicionar ao mapa as camadas com os dados estatisticos. Os metodos controlam as modificacoes no mapa quando uma nova camada e adicionada ou alterada. essas alteracoes seguem as seguintes regras: - ao adicionar uma camada, as que ja tiverem sido adicionadas sao desligadas - a nova camada e sempre adicionada sobre as demais, menos no caso dos limites municipais e estaduais - o usuario pode definir qual a forma de representacao da nova camada que sera adicionada - uma mesma camada pode ser adicionada mais de uma vez, desde que a forma de representacao seja diferente das ja existentes Para utilizar as funcoes desse objeto utilize SAGE. */ SAGE = { /* Variavel: IDMAPA ID do mapa definido na inicializacao com abremapa.php */ IDMAPA: "", /* Variavel: LISTADELINKS Lista de links que serao abertos quando um tema for escolhido Exemplo SAGE.LISTADELINKS = { "avaliacao_colegiado": [{ cabecalho:"teste do cabecalho", idDiv:"", //opcional se janelaFlutuante for false janelaFlutuante: true, url:"", left:"0", top:"0", w:"100", h:"100" }] }; */ LISTADELINKS: "", /* Variavel: LISTADECAMADAS Lista de camadas que serao utilizadas para compor os combos de camadas. Normalmente os combos sao montados lendo-se um grupo existente no catalogo de temas. Porem, e possivel definir a lista como um objeto javascript Exemplo SAGE.LISTADECAMADAS = { "data":{ "subgrupo":[ { "id_n2":"1",//basta ser sequencial "nome":"Nome do combo 1", "temas":[ { "codigo_tema":"cgets_disei_sedes", "id_n3":"1", //basta ser sequencial "nome_tema":"DSEI - Sedes" }, { "codigo_tema":"cgets_disei_municipios", "id_n3":"2", "nome_tema":"DSEI - municipios" } ] }, { "id_n2":"2",//basta ser sequencial "nome":"Nome do combo 2", "temas":[ { "codigo_tema":"cgets_disei_sedes", "id_n3":"1", //basta ser sequencial "nome_tema":"DSEI - Sedes" }, { "codigo_tema":"cgets_disei_municipios", "id_n3":"2", "nome_tema":"DSEI - munic\municipios" } ] } ] } }; */ LISTADECAMADAS: "", /* Variavel: DIVTITULO ID de um elemento HTML do tipo DIV que ira receber o titulo sempre que um tema for escolhido em um dos combos Type: {string} Default: {""} */ DIVTITULO: "tituloEscolhido", /* Variavel: COLUNAFILTRO Nome da coluna de um LAYER que recebera um filtro Utilizado na funcao obtemFiltro para armazenar a escolha feita pelo usuario Type: {string} Default: {""} */ COLUNAFILTRO: "", /* Variavel: IDENTIFICA Nome do arquivo PHP (sem a extensao .php) que sera utilizado na ferramenta de identificacao Type: {string} Default: {""} */ IDENTIFICA: "", /* Propriedade: IDMENU Id do menu existente no sistema de administracao do i3Geo que sera utilizado para obter os grupos. */ IDMENU: 4, /* Propriedade: IDGRUPO Id do grupo existente no sistema de administracao do i3Geo que sera utilizado para obter os subgrupos. Para cada subgrupo sera criado um combo contendo os temas que o usuario podera escolher. */ IDGRUPO: 1, /* Propriedade: CRITICAHOMOG Array contendo os identificadores dos subgrupos que deverao passar pela critica de grupo homogênio. Os identificadores correspondem ao codigo do subgrupo no sistema de administracao do i3Geo. Ao escolher um subgrupo que estiver na lista, o sistema ira verificar se um subgrupo foi escolhido ou nao. */ CRITICAHOMOG: [148,150,182], /* Function: inicia Inicializa os componentes especificos da SAGE, executando as funcoes SAGE.listaItensGrupos e SAGE.regioes.inicia */ inicia: function(){ SAGE.verificaLogin(); SAGE.regioes.inicia(); if(SAGE.IDENTIFICA !== "") {i3GEO.configura.funcaoIdentifica = "SAGE.identifica()";} }, /* Function: telaLogin Abre a tela de login */ telaLogin: function(erro){ if(!erro){ erro = ""; } var divc, cancela = function(){ YAHOO.SAGElogin.dialogo.destroy(); }, autentica = function(){ SAGE.verificaLogin(); }; if(!$i("formularioLogin")){ divc = document.createElement("div"), ins = '' + '
' + '
Login
' + '
' + '
' + '

' + '
' + '

' + erro + '

' + '
' + '
' + '
'; divc.className = "yui-skin-sam"; divc.innerHTML = ins; document.body.appendChild(divc); } YAHOO.namespace("SAGElogin"); YAHOO.SAGElogin.dialogo = new YAHOO.widget.Dialog("formularioLogin",{ width : "15em", fixedcenter : true, visible : true, close: false, constraintoviewport : true, buttons : [ { text:"OK", handler:autentica, isDefault:true }, { text:"Cancela", handler:cancela } ] } ); YAHOO.SAGElogin.dialogo.render(); }, /* Function: verificaLogin Verifica se o usuario fez login ou nao Return: boolean */ verificaLogin: function(){ var p = i3GEO.configura.locaplic+"/sage/funcoes.php?funcao=verificaLogin&g_sid="+i3GEO.configura.sid+"&idmapa="+SAGE.IDMAPA, usuario = "", senha = "", funcao = function(retorno){ if(retorno.data === "false"){ $i("combosGrupos").innerHTML = ""; if($i("formularioLogin")){ YAHOO.SAGElogin.dialogo.destroy(); SAGE.telaLogin("Falha no login"); } else{ SAGE.telaLogin(); } } else{ SAGE.listaItensGrupos(); if($i("formularioLogin")){ YAHOO.SAGElogin.dialogo.destroy(); } } }; if($i("usuario")){ usuario = $i("usuario").value; } if($i("senha")){ senha = $i("senha").value; } p += "&usuario="+usuario+"&senha="+senha; cpJSON.call(p,"foo",funcao); }, /* Function: abreCortina Abre uma janela flutuante contendo a opcao de aplicar o efeito cortina sobre um tema, permitindo a visualizacao do conteúdo que esta "escondido" pelo tema em foco */ abreCortina: function(){ i3GEOF.cortina.criaJanelaFlutuante("",390,85); // altura da janela i3GEO.janela.minimiza("i3GEOF.cortina"); i3GEOF.cortina.janela.cfg.setProperty("fixedcenter",false); i3GEO.janela.minimiza("cegonhaJanelaRegioes"); }, /* Function: criaCombo Cria a opcao de escolha de um tema para um determinado subgrupo O evento onchange dispara a funcao que adiciona uma nova camada ao mapa Parametros: valores - objeto com os ids e titulos de cada componente que sera incluido no combo idPai - identificador do elemento pai dos valores titulo - titulo do combo Retorno: {string html} */ criaCombo: function(valores,idPai,titulo){ var ins = "

"+titulo+":

", i, n = valores.length; ins += ""; return ins; }, /* Function: adicionaCamada Adiciona uma nova camada ao mapa Envia como parâmetros tambem o filtro que devera ser aplicado à camada, o tipo de representacao, esquema de cores e simbolo Apos adicionar a camada, o titulo e mostrado no div com id SAGE.DIVTITULO (se houver) Parametros: idPai - identificador do elemento pai que contem os temas definidos em obj obj - objeto do tipo SELECT cujo value corresponde ao codigo do tema que sera adicionado ao mapa */ adicionaCamada: function(idPai,obj){ var nome, listaCombos, nlistaCombos, i, temp, id = obj.value, simb = $i("combosTipoSimbolo").value, esquemacor = $i("combosTipoCores").value, simbolo = "", tamanho = "", representacao = "", p, funcao = function(retorno){ i3GEO.janela.fechaAguarde("cegonha1"); i3GEO.atualiza(); i3GEO.mapa.ativaTema(retorno.data); SAGE.mostraTitulo(obj.options[obj.selectedIndex].text); }, filtro = ""; SAGE.fechaJanelas(); if(i3GEO.util.in_array(parseInt(idPai,10),SAGE.CRITICAHOMOG)){ if($i("combosFiltroTemas").value == ""){ alert("Escolha um grupo primeiro"); obj.value = ""; return; } filtro = SAGE.obtemFiltro(); } nome = obj.options[obj.selectedIndex].text; if(simb != "") {nome += " - "+$i("combosTipoSimbolo").options[$i("combosTipoSimbolo").selectedIndex].text;} if(esquemacor != "") {nome += " - "+$i("combosTipoCores").options[$i("combosTipoCores").selectedIndex].text;} p = i3GEO.configura.locaplic+"/sage/funcoes.php?funcao=adicionaCamada&g_sid="+i3GEO.configura.sid+"&idPai="+idPai+"&nome="+nome+"&iditem="+id; if(id == "") {return;} if(simb !== ""){ simb = simb.split(","); simbolo = simb[0]; tamanho = simb[1]; representacao = simb[2]; } p += "&simbolo="+simbolo+"&tamanho="+tamanho+"&representacao="+representacao+"&esquemacor="+esquemacor+"&idmapa="+SAGE.IDMAPA; i3GEO.janela.abreAguarde("cegonha1","Adicionando camada..."); cpJSON.call(p+filtro,"foo",funcao); //destiva combos temp = obj.value; listaCombos = $i("combosGrupos").getElementsByTagName("select"); nlistaCombos = listaCombos.length; for(i = 0; i"+combo+""; }; cpJSON.call(p,"foo",funcao); }, /* Function: listaItensGrupos Obtem a lista de itens (subgrupos) e temas contidos em um grupo do sistema de administracao do i3Geo O resultado e uma string HTML que sera inserida no elemento DOM com id "combosGrupos" Retorno: {string html} */ listaItensGrupos:function(){ if(SAGE.IDMENU){ var funcao = function(retorno){ if(retorno.data == undefined) {return;} var i, temp, valores = [], tempi, tempn, ins = "", data = retorno.data.subgrupo, n = data.length; for(i=0; i */ identifica: function(){ if (g_tipoacao === "identifica" || i3GEO.eventos.cliquePerm){ i3GEO.eventos.MOUSEPARADO.remove("verificaTip()"); if(!$i("identificaSage")){ i3GEO.janela.cria( "677px", "577px", i3GEO.configura.locaplic+"/sage/"+SAGE.IDENTIFICA+".php?xx="+objposicaocursor.ddx+"&yy="+objposicaocursor.ddy+"&g_sid="+i3GEO.configura.sid, "", "", "Identifica", "identificaSage" ); } } }, /* Function: aplicaFiltro Aplica um filtro em todas as camadas que contem indicadores e estao no mapa O filtro e obtido com Parametro: nomecoluna - nome da coluna da tabela de atributos que recebera o filtro */ aplicaFiltro: function(nomecoluna){ if(nomecoluna) {SAGE.NOMECOLUNA = nomecoluna;} var p = i3GEO.configura.locaplic+"/sage/funcoes.php?g_sid="+i3GEO.configura.sid+"&funcao=inserefiltro", temp = function(retorno){ i3GEO.janela.fechaAguarde("filtrando"); i3GEO.Interface.atualizaMapa(); }, filtro = SAGE.obtemFiltro(); if(filtro === "") {return "";} i3GEO.janela.abreAguarde("filtrando","Aplicando filtro..."); cpJSON.call(p+filtro,"foo",temp); }, /* Function: obtemFiltro Analisa o elemento DOM de id "combosFiltroTemas" e gera uma tring com os parâmetros que erao utilizados em Retorno: {string} */ obtemFiltro: function(){ var combo = $i("combosFiltroTemas"), re = new RegExp("'", "g"), valor = combo.value; if(!combo){return "";} if(valor == "") {return "";} if(valor == "remover") {valor = "";} return "&nomecoluna="+SAGE.NOMECOLUNA+"&filtro="+valor.replace(re,'|'); }, /* Function: regioes Contem metodos que permitem destacar determinadas regioes no mapa Uma camada especial e adicionada ao mapa para sobrepor as areas que nao pertencem à regiao escolhida, provocando um efeito de destaque da regiao escolhida Ao escolher uma regiao, as ocorrências sao mostradas no mapa e e aberto o combo seguinte para a escolha de uma subregiao. Essas subregioes variam conforme a regiao maior que for escolhida A lista de regioes principais e construida por meio de um HTML fixo, assim como a lista de estados (UF). Os demais combos sao construidos conforme o definido no objeto SAGE.regioes.lista */ regioes: { lista:[ {id: "comboUF"}, {id: "comboMun"}, {id: "comboMetro"}, {id: "comboCidadania"}, {id: "comboIndigena"}, {id: "comboCol"} ], pegaElementoLista: function(chave,valor){ var lista = SAGE.regioes.lista, n = lista.length, i; for(i=0;i', i, n = lista.length; for(i=0;i"+lista[i].nome+""; } ins += ""; onde.innerHTML = ins; $i(idcombo).style.display = "block"; }, aplicar: function(zoom){ if(!zoom) {zoom = false;} var comboRegiao = $i("comboRegiao"), comboUF = $i("comboUF"), comboMun = $i("comboMun"), comboCol = $i("comboCol"), comboMetro = $i("comboMetro"), comboCidadania = $i("comboCidadania"), comboIndigena = $i("comboIndigena"), filtro = "", nome = comboRegiao.options[comboRegiao.selectedIndex].text, funcao = function(retorno){ i3GEO.janela.fechaAguarde("cegonhar"); if(zoom){ var z = retorno.data[0]; i3GEO.navega.zoomExt( i3GEO.configura.locaplic, i3GEO.configura.sid, i3GEO.parametros.tipoimagem, (z.xmin+" "+z.ymin+" "+z.xmax+" "+z.ymax) ); } else{ i3GEO.atualiza(); i3GEO.Interface.atualizaTema("","cegonharegiao"); } }, p; if(!zoom) {p = i3GEO.configura.locaplic+"/sage/funcoes.php?funcao=ativaRegiao&g_sid="+i3GEO.configura.sid;} else {p = i3GEO.configura.locaplic+"/sage/funcoes.php?funcao=zoomRegiao&g_sid="+i3GEO.configura.sid;} if(comboUF.value != "") {nome += " "+comboUF.options[comboUF.selectedIndex].text;} if(comboMun && comboMun.value != "") {nome += " "+comboMun.options[comboMun.selectedIndex].text;} if(comboCol && comboCol.value != "") {nome += " "+comboCol.options[comboCol.selectedIndex].text;} if(comboCidadania && comboCidadania.value != "") {nome += " "+comboCidadania.options[comboCidadania.selectedIndex].text;} /* if(comboIndigena && comboIndigena.value != "") {nome += " "+comboIndigena.options[comboIndigena.selectedIndex].text;} */ if(comboRegiao && comboRegiao.value != "") {filtro = comboRegiao.value;} if(comboUF && comboUF.value != ""){ filtro = "("+comboUF.value+")"; if(comboRegiao.value == "co_colegiado_gestao isnull or co_colegiado_gestao = 0"){ filtro += " or (not("+comboUF.value+") and co_colegiado_gestao isnull or co_colegiado_gestao = 0 )"; } if(comboRegiao.value == "co_reg_metropolitana isnull"){ filtro += " or (not("+comboUF.value+") and co_reg_metropolitana isnull )"; } if(comboRegiao.value == "co_tr_cidadania isnull"){ filtro += " or (not("+comboUF.value+") and co_tr_cidadania isnull )"; } if(comboRegiao.value == "co_dsei isnull"){ filtro += " or (not("+comboUF.value+") and co_dsei isnull )"; } } if(comboMun && comboMun.value != "") {filtro = comboMun.value;} if(comboCol && comboCol.value != "") {filtro = comboCol.value;} if(comboMetro && comboMetro.value != "") {filtro = comboMetro.value;} if(comboCidadania && comboCidadania.value != "") {filtro = comboCidadania.value;} if(comboIndigena && comboIndigena.value != "") {filtro = comboIndigena.value;} p += "&filtro="+filtro+"&nome="+nome; i3GEO.janela.abreAguarde("cegonhar","Regiao..."); cpJSON.call(p,"foo",funcao); }, html: function(){ var ins = '

'; ins += '

' + '' + '
'; ins += '
' + '' + '
'; //inicializacao do combo de municipios ins += '
' + '' + '
'; //inicializacao do combo de colegiados ins += '
' + '' + '
'; //inicializacao do combo de metropoles ins += '
' + '' + '
'; //inicializacao do combo de territorios da cidadania ins += '
' + '' + '
'; //inicializacao do combo dos distritos indigenas ins += '
' + '' + '
'; return ins; }, inicia: function(){ var minimiza,cabecalho,janela,titulo; if(!$i("destacaRegioes")){ minimiza = function(){ i3GEO.janela.minimiza("cegonhaJanelaRegioes"); }; cabecalho = function(){}; //cria a janela flutuante titulo = "Regioes"; janela = i3GEO.janela.cria( "220px", "150px", "", "", "", titulo, "cegonhaJanelaRegioes", false, "hd", cabecalho, minimiza ); janela[2].innerHTML = SAGE.regioes.html(); janela[0].cfg.setProperty("fixedcenter",false); janela[0].moveTo(630,85); janela[0].cfg.setProperty("close",false); $i("cegonhaJanelaRegioes_minimizaCabecalho").style.right = "0px"; } else{ $i("destacaRegioes").innerHTML = SAGE.regioes.html(); } if($i("botaoZoomRegiao")) {$i("botaoZoomRegiao").innerHTML = "";} new YAHOO.widget.Button( "cegonhaRegioesZoom", {onclick:{fn: function(){SAGE.regioes.aplicar(true);}}} ); } } };