/*
Title: Gráfico interativo 1
Representação gráfica de dados. O gráfico é construído tendo como base os atributos de um tema e é modificado
conforme o usuário navega pelo mapa. A renderização do gráfico é feito pelo navegador por meio do aplicativo openflashchart.
Os dados que serão utilizados no gráfico são baseados em um elemento TABLE. Esse elemento pode ser montado com base na tabela
de atributos e editada pelo usuário. Os dados podem também ser inseridos como parāmetros na inicialização da ferramenta,
permitindo que o gráfico seja utilizado por outras ferramentas.
Veja:
Arquivo:
i3geo/ferramentas/graficointerativo1/index.js.php
Licenca:
GPL2
i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
Este programa é software livre; você pode redistribuí-lo
e/ou modificá-lo sob os termos da Licença Pública Geral
GNU conforme publicada pela Free Software Foundation;
Este programa é distribuído na expectativa de que seja útil,
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
Consulte a Licença Pública Geral do GNU para mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral do
GNU junto com este programa; se não, escreva para a
Free Software Foundation, Inc., no endereço
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*/
if (typeof (i3GEOF) === 'undefined') {
var i3GEOF = {};
}
/*
* Classe: i3GEOF.graficointerativo1
*
*/
i3GEOF.graficointerativo1 = {
/*
* Variavel: aguarde
*
* Estilo do objeto DOM com a imagem de aguarde existente no
* cabeçalho da janela.
*/
aguarde : "",
/*
* Propriedade: dados
*
* Dados que serao utilizados. Pode ser passado como parametro.
*
* Default: {false}
*/
dados : false,
/*
* Propriedade: titulo
*
* Título do gráfico. Se for vazio, será obtido do nome
* do tema selecionado
*/
titulo : "",
/*
* Propriedade: tipo
*
* Tipo de gráfico escolhido pelo usuário.
*/
tipo : "",
/*
* Propriedade: acumula
*
* Acumula os valores ao gerar o gráfico
*
* Type: {boolean}
*
* Default: {false}
*/
acumula : false,
/*
* Propriedade: relativa
*
* Utiliza valores relativos ao criar o gráfico
*
* Type: {boolean}
*
* Default: {false}
*/
relativa : false,
/*
* Propriedade: dadospuros
*
* Não faz nenhum tipo de processamento nos dados antes de gerar o
* gráfico
*
* Type: {boolean}
*
* Default: {false}
*/
dadospuros : false,
/*
* Propriedade: navegacao
*
* Ativa ou não a navegação dināmica do mapa
*
* Type: {boolean}
*
* Default: {false}
*/
navegacao : false,
/*
* Para efeitos de compatibilidade antes da versão 4.7 que não
* tinha dicionário
*/
criaJanelaFlutuante : function(dados) {
if (dados) {
i3GEOF.graficointerativo1.dados = dados;
}
i3GEOF.graficointerativo1.iniciaDicionario();
},
/*
* Function: iniciaDicionario
*
* Carrega o dicionário e chama a função que inicia a
* ferramenta
*
* O Javascript é carregado com o id
* i3GEOF.nomedaferramenta.dicionario_script
*/
iniciaDicionario : function(dados) {
if (dados) {
i3GEOF.graficointerativo1.dados = dados;
}
if (typeof (i3GEOF.graficointerativo1.dicionario) === 'undefined') {
i3GEO.util.scriptTag(i3GEO.configura.locaplic
+ "/ferramentas/graficointerativo1/dependencias.php",
"i3GEOF.graficointerativo1.iniciaJanelaFlutuante()",
"i3GEOF.graficointerativo1.dicionario_script");
} else {
i3GEOF.graficointerativo1.iniciaJanelaFlutuante(dados);
}
},
/*
* Function: inicia
*
* Inicia a ferramenta. É chamado por criaJanelaFlutuante
*
* Parametros:
*
* iddiv {String} - id do div que receberá o conteudo HTML da
* ferramenta
*
* dados {JSON} - dados para o gráfico (opcional) exemplo
* ["n;x","'Argentina';33796870","'Paraguay';4773464","'Brazil';151525400","'Chile';13772710"]
*/
inicia : function(iddiv) {
// try{
$i(iddiv).innerHTML += i3GEOF.graficointerativo1.html();
$i("i3GEOgraficointerativo1Acumula").checked = i3GEOF.graficointerativo1.acumula;
$i("i3GEOgraficointerativo1Relativa").checked = i3GEOF.graficointerativo1.relativa;
$i("i3GEOgraficointerativo1DadosPuros").checked = i3GEOF.graficointerativo1.dadospuros;
if (i3GEOF.graficointerativo1.navegacao === true) {
i3GEOF.graficointerativo1.ativaNavegacao(true);
}
// eventos das guias
//tipos de graficos
$i("i3GEOgraficointerativo1guia1").onclick = function() {
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia1",
"i3GEOgraficointerativo1guia");
$i("i3GEOgraficointerativo1Grafico").style.display = "none";
};
//dados para o grafico
$i("i3GEOgraficointerativo1guia2").onclick = function() {
if(i3GEOF.graficointerativo1.tipo === ""){
alert($trad(4, i3GEOF.graficointerativo1.dicionario));
return;
}
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia2","i3GEOgraficointerativo1guia");
i3GEOF.graficointerativo1.configuraDados();
$i("i3GEOgraficointerativo1Grafico").style.display = "none";
};
//propriedades adicionais
$i("i3GEOgraficointerativo1guia3").onclick = function() {
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia3",
"i3GEOgraficointerativo1guia");
$i("i3GEOgraficointerativo1Grafico").style.display = "none";
};
//mostra o grafico
$i("i3GEOgraficointerativo1guia4").onclick = function() {
if(i3GEOF.graficointerativo1.tipo === ""){
alert($trad(4, i3GEOF.graficointerativo1.dicionario));
return;
}
if($i("i3GEOgraficointerativo1Dados").innerHTML === ""){
return;
}
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia4","i3GEOgraficointerativo1guia");
var t = $i("i3GEOgraficointerativo1Grafico");
t.style.display = "block";
t.style.position = "relative";
t.style.top = "-5px";
t.visibility = "visible";
i3GEOF.graficointerativo1.tabela2dados();
};
$i("i3GEOgraficointerativo1guia5").onclick = function() {
if(i3GEOF.graficointerativo1.tipo === ""){
alert($trad(4, i3GEOF.graficointerativo1.dicionario));
return;
}
if($i("i3GEOgraficointerativo1Dados").innerHTML === ""){
return;
}
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia5","i3GEOgraficointerativo1guia");
$i("i3GEOgraficointerativo1Grafico").style.display = "none";
$i("i3GEOgraficointerativo1guia5obj").innerHTML = "";
};
$i("i3GEOgraficointerativo1guia6").onclick = function() {
if(i3GEOF.graficointerativo1.tipo === ""){
alert($trad(4, i3GEOF.graficointerativo1.dicionario));
return;
}
if($i("i3GEOgraficointerativo1Dados").innerHTML === ""){
return;
}
var w,h,form = $i("i3GEOgraficointerativo1PNG"),
isvg = form.getElementsByTagName("input")[0],
svg = $i("i3GEOgraficointerativo1guia4objCanvas").firstChild;
h = svg.getAttributeNS(null, 'height');
w = svg.getAttributeNS(null, 'width');
if (typeof XMLSerializer != "undefined"){
svg = (new XMLSerializer()).serializeToString(svg);
} else {
svg = svg.html();
}
isvg.value = svg;
form.action = form.action+"?"+"w="+w+"&h="+h;
form.submit();
};
i3GEOF.graficointerativo1.ativaFoco();
i3GEOF.graficointerativo1.comboTemas();
new YAHOO.widget.Button("i3GEOgraficointerativo1botao1", {
onclick : {
fn : i3GEOF.graficointerativo1.obterDados
}
});
if (i3GEOF.graficointerativo1.dados && i3GEOF.graficointerativo1.dados != "undefined") {
i3GEOF.graficointerativo1.montaTabelaDados(i3GEOF.graficointerativo1.dados);
$i("i3GEOgraficointerativo1guia4").onclick.call();
}
else{
i3GEO.guias.mostraGuiaFerramenta("i3GEOgraficointerativo1guia1","i3GEOgraficointerativo1guia");
}
},
/*
* Function: html
*
* Gera o código html para apresentação das
* opções da ferramenta
*
* Retorno:
*
* String com o código html
*/
html : function() {
var locaplic = i3GEO.configura.locaplic, ins = ''
+ '
");
n = dados.length;
for (i = 1; i < n; i++) {
v = dados[i].split(";");
// ins += v[0]+" "+v[1];
id = "i3GEOgraficointerativo1Dados" + i; // layer+indice da classe
ins.push("
");
if ($i("i3GEOgraficointerativo1CoresA").checked) {
cor = i3GEO.util.rgb2hex(i3GEO.util.randomRGB());
}
// verifica se no objeto com os dados existe um terceiro valor com
// as cores
if (v[ncolunas + 1]) {
cor = i3GEO.util.rgb2hex(v[ncolunas + 1]);
}
ins.push($inputText("", "", id + "_cor", "", 12, cor, $trad(41,
i3GEOF.graficointerativo1.dicionario)));
ins.push("
");
ins.push("");
ins.push("
");
}
ins.push("
");
$i("i3GEOgraficointerativo1Dados").innerHTML = ins.join("");
},
/*
* Function: tabela2csv
*
* Obtém os dados da tabela em CSV
*/
tabela2csv : function() {
var colunas = i3GEOF.graficointerativo1.nomesColunas(),
ncolunas = colunas[0].length,
inputs = $i("i3GEOgraficointerativo1Dados").getElementsByTagName("input"),
ninputs = inputs.length,
i,j,
temp,
csv = [];
csv.push(colunas[0].join(";"));
for (i = 0; i < ninputs; i = (i + 1 + ncolunas)){
temp = [];
for(j=0;j 0){
menor = inputs[1].value * 1;
}
if ($i("i3GEOgraficointerativo1ComboTemasId")) {
titulo = $i("i3GEOgraficointerativo1ComboTemasId").options[$i("i3GEOgraficointerativo1ComboTemasId").options.selectedIndex].text;
}
if (i3GEOF.graficointerativo1.titulo != "") {
titulo = i3GEOF.graficointerativo1.titulo;
}
if ($i("i3GEOgraficointerativo1ComboXid")) {
legendaX = $i("i3GEOgraficointerativo1ComboXidTitulo").value;
}
if ($i("i3GEOgraficointerativo1ComboYid")) {
legendaY = $i("i3GEOgraficointerativo1ComboYidTitulo").value;
}
if(ncolunas === 2){
for (i = 0; i < ninputs; i = i + 3) {
temp = inputs[i + 1].value * 1;
total += temp;
cores.push(inputs[i + 2].value);
}
for (i = 0; i < ninputs; i = (i + 1 + ncolunas)) {
temp = inputs[i + 1].value * 1;
acum = ultimo + temp;
acumulado.push(acum);
ultimo = ultimo + temp;
if (temp > maior) {
maior = temp;
}
if (temp < menor) {
menor = temp;
}
temp = inputs[i + 1].value * 1;
if ($i("i3GEOgraficointerativo1Acumula").checked) {
temp = acum;
}
if ($i("i3GEOgraficointerativo1Relativa").checked) {
temp = (temp * 100) / total;
}
par.push([ inputs[i].value + " ", temp ]);
}
if ($i("i3GEOgraficointerativo1Acumula").checked) {
maior = 0;
}
}
else{
total = 0;
for (i = 0; i < ninputs; i = (i + 1 + ncolunas)){
temp = [];
for(j=0;j 0);
p.parentNode.removeChild(p);
},
/*
* Function: corj
*
* Abre a janela para o usuário selecionar uma cor interativamente
*/
corj : function(obj) {
i3GEO.util.abreCor("", obj, "hex");
},
/*
* Function: ordenaColuna
*
* Ordena uma coluna da tabela
*/
ordenaColuna : function(coluna, cid) {
var tabela = $i("i3GEOgraficointerativo1Dados").getElementsByTagName(
"table")[0], trs, ntrs = 0, psort = [], t = 0, ins = "", p = 0, e, temp, chaves = [], numero = false;
trs = tabela.getElementsByTagName("tr");
ntrs = trs.length;
function sortNumber(a, b) {
return a - b;
}
for (t = 1; t < ntrs; t++) {
temp = trs[t].childNodes[cid];
if (temp) {
psort.push(temp.childNodes[0].value);
chaves[temp.childNodes[0].value] = t;
if (temp.childNodes[0].value * 1) {
numero = true;
}
}
}
// recosntroi a tabela
if (numero === true) {
psort = psort.sort(sortNumber);
} else {
psort = psort.sort();
}
ins = "
" + trs[0].innerHTML + "
";
for (p = 0; p < psort; p++) {
e = chaves[psort[p]];
if (trs[e] !== undefined) {
ins += "