//usa protomoojax-1.2-packed.js

//Vars. Globais
//url do processador de mapas
var strProcURL = 'mapaJS.asp'; //'mapaJS.asp';
//divMapa
//var strDivMapa = 'theMap';
//idMapaImg
//var strIdMapaImg = 'MAP';
//XMLHttpRequest object
//var req ;
var mTempo;
//Comando
var comandoToolbar;

function pedeMapa(strComando, objArgs)
{
	var url = strProcURL;
	var metodo = 'get';
	var postBody = '';
	var oncomplete = processaMapa;
	var pedido = new Object;
	
	comandoToolbar = strComando;
	
	hideTipNow();

	//pedido.funcao = new Object;
	pedido.funcao = strComando;
	if(objArgs) pedido.xargs = objArgs; //se houver um objecto com argumentos extra, passar também!
	//pedido.mapa = mMapa.toTxt();
	pedido.mapa = mMapa.getObjAJAX();
	//pedido.pers = mPers.getObjAJAX();
	//var pars = 'funcao=init&layers=100111001';  //'mapa=' + mMapa.toTxt //'funcao=init&layers=100111001';
	var strParams = JSON.stringify(pedido);
	var strParams = 'pedido=' + strParams;
	log(strParams);
	mTempo=new Date().getTime(); //new Date().getSeconds() + new Date().getMilliseconds()/1000;
	log('ini: ' + mTempo);
	
	new Ajax.Request (url, { method: metodo, parameters: strParams, onSuccess: processaMapa, onFailure: processaErro, onTimeout:processaTimeOut } );
}

function pedeDados(strComando, objArgs)
{
	var url = strProcURL;
	var metodo = 'get';
	var postBody = '';
	var pedido = new Object;
	
	//pedido.funcao = new Object;
	pedido.funcao = strComando;

	if(strComando == "IDENTIFICAR" || strComando == "IMGGEOREF")
	{
		pedido.mapa = mMapa.getObjAJAX();
	}

	if(objArgs) pedido.xargs = objArgs; //se houver um objecto com argumentos extra, passar também!
	
	var strParams = JSON.stringify(pedido);
	var strParams = 'pedido=' + strParams;
	log(strParams);
	
	new Ajax.Request (url, { method: metodo, parameters: strParams, onSuccess: processaDados, onFailure: processaErro, onTimeout:processaTimeOut } );
}


function pedeMapaEnq(strComando, objArgs)
{
	var url = strProcURL;
	var metodo = 'get';
	var postBody = '';
	var pedido = new Object;
	
	//pedido.funcao = new Object;
	pedido.funcao = strComando;

	if(objArgs) pedido.xargs = objArgs; //se houver um objecto com argumentos extra, passar também!
	
	var strParams = JSON.stringify(pedido);
	var strParams = 'pedido=' + strParams;
	log(strParams);
	
	new Ajax.Request (url, { method: metodo, parameters: strParams, onSuccess: processaMapaEnq, onFailure: processaErro, onTimeout:processaTimeOut } );
}

function processaMapaEnq(req_orig)
{
	var strResp = req_orig.responseText;
	var objResp = JSON.parse(strResp);
	
	if (objResp)
	{
		$("mapaEnq").style.backgroundImage = 'url(' + objResp.url + ')';
	}
	
	//alert($("mapaEnq").style.backgroundImage)
}



function processaDados(req_orig)
{
	var strResp = req_orig.responseText;
	var objResp = JSON.parse(strResp);
		
	log(JSON.parse(strResp));
	log('strResp:' + strResp);

	var temp = mTempo;
	mTempo=new Date().getTime(); //new Date().getSeconds() + new Date().getMilliseconds()/1000;
	log(objResp.funcao + ' <b>fim</b>: ' + mTempo + ' -> duração: ' + ((mTempo-temp)/60) + ' secs');

	if (objResp)
	{
		log(JSON.parse(strResp));
		log('strResp:' + strResp);
	}
	
	var funcao = objResp.funcao;
		
	if (funcao == "ERRO")
	{
		/*IDT_MOUSE = { "clientX":480, "clientY": 295 };
		doTooltip(IDT_MOUSE, "Erro", objResp.erro);*/
		janelaTxt("Erro", objResp.erro, 480, 295);
		toggleWait('off')
		return;
	}


	if (funcao == "INITDADOS")
	{
		mMapa.actualizaExt(objResp.dados);
		var arrTemas = arvoreTemas();
		arrTemasAXLVis = getTemasVis(arrTemas);
		mMapa.layers = arrTemasAXLVis;
		//pedeMapaEnq("MAPAENQ",{"xmin":mMapa.extent.xmin,"ymin":mMapa.extent.ymin,"xmax":mMapa.extent.xmax,"ymax":mMapa.extent.ymax})

	}
	
	if (funcao == "LISTACONCELHOS")
	{
		preencheConcelhos(objResp.dados.dados,"Sel_Pesq_Concelho")
		preencheConcelhos(objResp.dados.dados,"Sel_PesqR_Concelho")
	}

	if (funcao == "LISTAPERCURSOS")
	{
		var dados = objResp.dados.dados;

		for (i = 0; i < dados.length; i++)
		{	
			defPercursos[i] = new Array(dados[i][0],dados[i][1]);
		}

		criarPercursos();
	}


	if (funcao == "PESQUISARDADOS")
	{
		var campos = objResp.dados.campos;
		var dados = objResp.dados.dados;
		var html = '';
		
		for (i = 1; i < campos.length; i++)
		{	
			if(dados[0][i] != "")
			{			
				html += '<div class="title">' + campos[i] + '<div>';
				html += '<div class="value">' + dados[0][i] + '<div>';
			}
		}
		
		doTooltip(IDT_MOUSE, "Detalhes", html);
		toggleWait('off')
	}

	if (funcao == "IDENTIFICAR")
	{
		if (objResp.dados.dados.length > 0)
		{
			var html = '';
					
			if (objResp.dados.dados.length == 1)
			{				
				for (j = 1; j < objResp.dados.dados[0].length; j++)
				{
					if (objResp.dados.dados[0][j] != "")			
					{
						html += '<div class="title">' + objResp.dados.campos[j] + '<div>';
						html += '<div class="value">' + objResp.dados.dados[0][j] + '<div>';
					}
				}
				doTooltip(IDT_MOUSE, "Ponto de Interesse", html);
			
				$("Panel_Left_4_Content").innerHTML = "";
				//setLeftPanel(4);	
			}
			else
			{
				var arrEnv = objResp.dados.envelopes;				

				for (i = 0; i < objResp.dados.dados.length; i++)
				{
					//html += '<div class="resultado">Resultado ' + (i + 1) +'</div>';
					html += '<table border="0" class="tableResultado"><tr><td class="tdResultadoLeft">Resultado ' + (i + 1) +'</td>'
					//html += '<td><a onclick="zoomPoint(' + arrEnv[i].xmin + ',' + arrEnv[i].ymin + ')"><img id="" src="imagens/zoom.png" title="Zoom" /></a></td>'
					html += '<td><a onclick="$(\'SPANdesignacao\').innerHTML = \'' + objResp.dados.dados[i][1] + '\';setBottomPanel(1);setPrxCoords(' + arrEnv[i].xmin + ',' + arrEnv[i].ymin + ')"><img id="" src="imagens/pesquisaprox.png" title="Pesquisar nas proximidades" /></a></td>'
					html += '<td><a onclick="marcarPI(' + objResp.dados.dados[i][0] + ',' + arrEnv[i].xmin + ',' + arrEnv[i].ymin + ')"><img id="" src="imagens/zoom.png" title="Zoom" /></a></td></tr></table>'
							
					for (j = 1; j < objResp.dados.dados[i].length; j++)
					{	
						if(objResp.dados.dados[i][j] != "")
						{	
							html += '<div class="title" style="display:inline;">' + objResp.dados.campos[j] + ': </div>';
							html += '<div class="value" style="display:inline;">' + objResp.dados.dados[i][j] + '</div><br>';
						}	
					}
				}
							
				$("Panel_Left_4_Content").innerHTML = html;
				$("Panel_Left_4_Content").style.top = "0px"
				setLeftPanel(4);
			}
		}
		else
		{
			doTooltip(IDT_MOUSE, "Ponto de Interesse", 'Não foram encontrados Pontos de Interesse!');
			$("Panel_Left_4_Content").innerHTML = "";
			//setLeftPanel(2);
		}
		
		toggleWait('off');
	}

	if (funcao == "GPX2SHAPE")
	{
		if (FILESYSTEM == 'igp') convert_Callback();

		else convertToIgp();
	}

	if (funcao == "CONVERT2IGP")
	{
		convert_Callback();
	}

	if (funcao == "IMGGEOREF")
	{
		
		criarImagem_Callback(objResp.dados.img,objResp.dados.geo);
		toggleWait('off');
	}
	
	if (funcao == 'LISTANEWS')
	{
	    processaNews(objResp.dados.dados);
	}

	if (funcao == "PERCURSODOWNLOAD") {
	  downloadPercurso_Callback(objResp.dados.gpxurl);
	}

}

function processaMapa(req_orig)
{
	var strResp = req_orig.responseText;
	var objResp = JSON.parse(strResp);
	//verificar que é um objecto JSON válido!!!
	
	log(JSON.parse(strResp));
	log('strResp:' + strResp);
	

	if (objResp)
	{
		log(JSON.parse(strResp));
		log('strResp:' + strResp);
	}
	
	var funcao = objResp.funcao;
	
	if (funcao == "ERRO")
	{
		toggleWait('off');
		/*IDT_MOUSE = { "clientX":480, "clientY": 295 };
		doTooltip(IDT_MOUSE, "Erro", objResp.erro);*/
		janelaTxt("Erro", objResp.erro, 480, 295);
		return;
	}

	mMapa.actualizaJSON(objResp);

	pedeMapaEnq("MAPAENQ",{"xmin":mMapa.extent.xmin,"ymin":mMapa.extent.ymin,"xmax":mMapa.extent.xmax,"ymax":mMapa.extent.ymax})
	
	var temp = mTempo;
	/*mTempo=new Date().getSeconds() + new Date().getMilliseconds()/1000;
	log(mTempo + ' secs fim - duração: ' + (mTempo-temp) + ' secs');*/
	mTempo=new Date().getTime(); //new Date().getSeconds() + new Date().getMilliseconds()/1000;
	log(objResp.funcao + ' <b>fim</b>: ' + mTempo + ' -> duração: ' + ((mTempo-temp)/60) + ' secs');

	
	if (funcao == "PESQUISARPROXIMIDADE")
	{
		if ("pesquisaProximidade" in objResp.mapa)
		{
			var campos = objResp.mapa.pesquisaProximidade.campos;
			var dados  = objResp.mapa.pesquisaProximidade.dados;
			var sHTML = '';
			IDT_MOUSE = { "clientX":480, "clientY": 295 };
			
			var i = 0; var j = 0;
			for (i = 0; i < dados.length; i++)  //cada rec é uma tabela de 2 cols!
			{	
				sHTML += '<div class="resultado">Resultado ' + (i+1) + '</div>'
				
				for (j = 1; j < campos.length; j++)
				{
					if(dados[i][j] != "")
					{
						//conteúdo da ficha
						sHTML += '<div class="title" style="display:inline;">' + campos[j] + ': </div>';
						sHTML += '<div class="value" style="display:inline;">' + dados[i][j] + '</div><br>';
					}
				}
			}

			$("Panel_PesquisaProx_Res").innerHTML = sHTML;
			$("Panel_PesquisaProx").style.display = "block";
			if (dados.length == numMaxRegistos)
			{
				$("spanTotalPesquisaProx").innerHTML = "(" + dados.length + "+)"
				doTooltip(IDT_MOUSE, "Pesquisar na Proximidade", 'Foram encontrados mais do que 20 resultados!');
				
			}
			else if (dados.length == 0)
			{
				doTooltip(IDT_MOUSE, "Pesquisar na Proximidade", 'Não foram encontrados resultados!');
			}
			else
				$("spanTotalPesquisaProx").innerHTML = "(" + dados.length + ")";
			
			$("Panel_Left_1_Content").style.top = "0px"

			fxPesqResProx.show();
			fxPesqRes.hide();			
		}
	}
	
	if (funcao == "PERCURSO")
	{
		if ("percurso" in objResp.mapa)
		{
			mapTipsCampos = objResp.mapa.percurso.campos;
			mapTipsDados = objResp.mapa.percurso.dados;
			mapTipsEnvelopes = objResp.mapa.percurso.envelopes;			
			mapTipsShow = true;
			sortPontos();
		}
	}
	
	if (mapTipsShow)
	{
		criarMapTips();
	}
	
	//dnc1.1 - processar a pesquisa de PIs/conteúdos
	if ("mapa" in objResp)
	{
		IDT_MOUSE = { "clientX":480, "clientY": 295 };

		log("Pesquisa de PI: mapa recebido");
		if ("pesquisarPI" in objResp.mapa)
		{
			var pesquisarPI = objResp.mapa.pesquisarPI;
			log("Pesquisa de PI: resultados recebidos");
			
			var arrCampos = pesquisarPI.campos;
			var arrVals = pesquisarPI.dados;
			var arrEnv = pesquisarPI.envelopes;

			var nRecs = arrVals.length;

			log("Pesquisa de PI: " + nRecs + " recs");
			//log("Pesquisa de PI: Recs=" +  mRecs);
			processaPI(nRecs,arrCampos,arrVals,arrEnv);
		}
		if ("pesquisarR" in objResp.mapa)
		{
			var pesquisarR = objResp.mapa.pesquisarR;

			var arrCampos = pesquisarR.campos;
			var arrVals = pesquisarR.dados;
			var arrEnv = pesquisarR.envelopes;

			var nRecs = arrVals.length;

			processaR(nRecs,arrCampos,arrVals,arrEnv);

			//if (pesquisarR.dados.length == 0) doTooltip(IDT_MOUSE, "Pesquisar Ruas", 'Não foram encontrados resultados!');
		}
		if ("pesquisarSL" in objResp.mapa)
		{
			var pesquisarSL = objResp.mapa.pesquisarSL;

			var arrCampos = pesquisarSL.campos;
			var arrVals = pesquisarSL.dados;
			var arrEnv = pesquisarSL.envelopes;

			var nRecs = arrVals.length;

			processaSL(nRecs,arrCampos,arrVals,arrEnv);
		
			if (pesquisarSL.dados.length == 0) doTooltip(IDT_MOUSE, "Pesquisar Sítios e Lugares", 'Não foram encontrados resultados!');
		}		
	}
	//dnc1.1 - fim
}

function processaErro(req_orig)
{
	toggleWait('off');
	log("processaErro");
	log('Erro: ' + req_orig.status + ' ' + req_orig.statusText);
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	//doTooltip(IDT_MOUSE, "Erro", "Ocorreu um erro inesperado, tente novamente.<br/>Caso persista, por favor volte mais tarde!");
	doTooltip(IDT_MOUSE, "Erro", infErro.API);
	return;
	
}

function processaTimeOut(req_orig)
{
	toggleWait('off');
	log("processaTimeOut");
	log('Erro: ' + req_orig.status + ' ' + req_orig.statusText);
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	doTooltip(IDT_MOUSE, "Erro", infErro.TIMEOUT);
	return;
}


//dnc1.1 - mostrar os resultados
//******************Todas as funções que processam resultados devem ir para outro JS*********************
//porque em principio vão produzir layout,design, etc.
//todos os css devem ir para o ficheiro de css - estes result estão dentro de um div próprio e podem ser estilizados especificamente
function processaPI(nRecs,arrCampos,arrVals,arrEnv)
{
	log("Pesquisa de PI: processando..." + nRecs);
	log("Pesquisa de PI: processando..." + arrCampos);
	log("Pesquisa de PI: processando..." + arrVals);
	
	var sHTML = '';	var imgTMP = '';
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	
	for (i = 0; i < nRecs; i++)  //cada rec é uma tabela de 2 cols!
	{
		imgTMP  = '<a onclick="mostraDetalhes(' + arrVals[i][0] + ',event,\'' + arrVals[i][1] + '\')"><img id="" src="imagens/infodetalhes.png" title="Ver detalhes" /></a>&nbsp;'
		imgTMP += '<a onclick="$(\'SPANdesignacao\').innerHTML = \'' + arrVals[i][1] + '\';setBottomPanel(1);setPrxCoords(' + arrEnv[i].xmin + ',' + arrEnv[i].ymin + ')"><img id="" src="imagens/pesquisaprox.png" title="Pesquisar nas proximidades" /></a>&nbsp;'
		imgTMP += '<a onclick="zoomPoint(' + arrEnv[i].xmin + ',' + arrEnv[i].ymin + ')"><img id="" src="imagens/zoom.png" title="Zoom" /></a>'
		sHTML += '<div class="resultado"><span style="float:left;display:inline;width:78%">&nbsp;Resultado ' + (i + 1) +'</span><span> ' + imgTMP + ' </span></div>';
		for (j = 1; j < arrCampos.length; j++)
		{
			if(arrVals[i][j] != "")
			{
				//conteúdo da ficha
				sHTML += '<div class="title" style="display:inline;">' + arrCampos[j] + ': </div>';
				sHTML += '<div class="value" style="display:inline;">' + arrVals[i][j] + '</div><br>';
			}
		}

	}

	log("Pesquisa de PI: processados..." + i);
	//colocar no div de resultados da pesquisa
		
	$("Panel_PesquisaPI_Res").innerHTML = sHTML;
	$("Panel_PesquisaPI").style.display = "block";
	$("spanTotalPesquisa").innerHTML = (nRecs == numMaxRegistos) ? "(" + nRecs + "+)" : "(" + nRecs + ")";

	if (nRecs == numMaxRegistos)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Foram encontrados mais do que 20 resultados!');
	}
	else if (nRecs == 0)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Não foram encontrados resultados na pesquisa	!');
	}
	
	$("Panel_PesquisaProx_Res").innerHTML = "";
	$("spanTotalPesquisaProx").innerHTML = "(-)";

	fxPesqRes.show();
	fxPesqResProx.hide();
}

function processaR(nRecs,arrCampos,arrVals,arrEnv)
{
	log("Pesquisa de PI: processando..." + nRecs);
	log("Pesquisa de PI: processando..." + arrCampos);
	log("Pesquisa de PI: processando..." + arrVals);
	
	var sHTML = '';	var imgTMP = '';
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	
	for (i = 0; i < nRecs; i++)  //cada rec é uma tabela de 2 cols!
	{
		imgTMP = '<a onclick="zoomVias(' + arrVals[i][0] + ')"><img id="" src="imagens/zoom.png" title="Zoom" /></a>'
		sHTML += '<div class="resultado"><span style="float:left;display:inline;width:93%">&nbsp;Resultado ' + (i + 1) +'</span><span> ' + imgTMP + ' </span></div>';
		for (j = 1; j < arrCampos.length; j++)
		{
			if(arrVals[i][j] != "")
			{
				//conteúdo da ficha
				sHTML += '<div class="title" style="display:inline;">' + arrCampos[j] + ': </div>';
				sHTML += '<div class="value" style="display:inline;">' + arrVals[i][j] + '</div><br>';
			}
		}

	}

	log("Pesquisa de PI: processados..." + i);
	//colocar no div de resultados da pesquisa
		
	$("Panel_PesquisaPI_Res").innerHTML = sHTML;
	$("Panel_PesquisaPI").style.display = "block";
	$("spanTotalPesquisa").innerHTML = (nRecs == numMaxRegistos) ? "(" + nRecs + "+)" : "(" + nRecs + ")";

	if (nRecs == numMaxRegistos)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Foram encontrados mais do que 20 resultados!');
	}
	else if (nRecs == 0)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Não foram encontrados resultados na pesquisa	!');
	}
	
	$("Panel_PesquisaProx_Res").innerHTML = "";
	$("spanTotalPesquisaProx").innerHTML = "(-)";

	fxPesqRes.show();
	fxPesqResProx.hide();
}

function processaSL(nRecs,arrCampos,arrVals,arrEnv)
{
	log("Pesquisa de PI: processando..." + nRecs);
	log("Pesquisa de PI: processando..." + arrCampos);
	log("Pesquisa de PI: processando..." + arrVals);
	
	var sHTML = '';	var imgTMP = '';
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	
	for (i = 0; i < nRecs; i++)  //cada rec é uma tabela de 2 cols!
	{
		imgTMP = '<a onclick="zoomSitios(' + arrVals[i][0] + ')"><img id="" src="imagens/zoom.png" title="Zoom" /></a>'
		sHTML += '<div class="resultado"><span style="float:left;display:inline;width:93%">&nbsp;Resultado ' + (i + 1) +'</span><span> ' + imgTMP + ' </span></div>';
		for (j = 1; j < arrCampos.length; j++)
		{
			if(arrVals[i][j] != "")
			{
				//conteúdo da ficha
				sHTML += '<div class="title" style="display:inline;">' + arrCampos[j] + ': </div>';
				sHTML += '<div class="value" style="display:inline;">' + arrVals[i][j] + '</div><br>';
			}
		}

	}

	log("Pesquisa de PI: processados..." + i);
	//colocar no div de resultados da pesquisa
		
	$("Panel_PesquisaPI_Res").innerHTML = sHTML;
	$("Panel_PesquisaPI").style.display = "block";
	$("spanTotalPesquisa").innerHTML = (nRecs == numMaxRegistos) ? "(" + nRecs + "+)" : "(" + nRecs + ")";

	if (nRecs == numMaxRegistos)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Foram encontrados mais do que 20 resultados!');
	}
	else if (nRecs == 0)
	{
		doTooltip(IDT_MOUSE, "Pesquisar", 'Não foram encontrados resultados na pesquisa	!');
	}
	
	$("Panel_PesquisaProx_Res").innerHTML = "";
	$("spanTotalPesquisaProx").innerHTML = "(-)";

	fxPesqRes.show();
	fxPesqResProx.hide();
}

