var mapTipsShow = false;
var mapTipsCampos;
var mapTipsDados;
var mapTipsEnvelopes;
var mapTipsOrder;

var ID_PERCURSO = -1;

//DC - Ago08 - opção para download em gpx
function downloadPercurso()
{
  var oSelPerc = $("Sel_Perc_Cat");
  var opIdx = oSelPerc.options[oSelPerc.selectedIndex].value;
  alert("download percurso: " + opIdx);
  pedeDados("PERCURSODOWNLOAD", { "perc": opIdx });
}

function downloadPercurso_Callback(url) {
  var html = "";
  if (_Idioma == "PT") {
    html = '<br>Clique com o botão direito nas ligações abaixo e selecione a opção "Guardar como" (Save As) para gravar o ficheiro gpx. <br/><br/>';
    html += 'Gravar: <a href="' + url + '" style="text-decoration:none;color:gray;">Ficheiro GPX</a><br/><br/>';
  }
  else {
    html = '<br>Click with the right button on the link below and choose "Save As" to download the gpx file. <br/><br/>';
    html += 'Save: <a href="' + url + '" style="text-decoration:none;color:gray;">GPX file</a><br/><br/>';
  }

  $("divPercGpx").innerHTML = html;
}


//DC - Ago08 - select passou para o html, opções são adicionadas dinamicamente
function criarPercursos()
{
	/*var html =  '<select id="Sel_Perc_Cat" name="Sel_Perc_Cat">';
	    html += '<option id="" value="" selected="true">Escolha um percurso</option>';
	    for (i = 0; i < defPercursos.length; i++)
	    {
		    html += '<option id="' + defPercursos[i][0] + '" value="' + defPercursos[i][0] + '" >'  + defPercursos[i][1] + '</option>';
	    }
	    html +='</select>'

	$("DIV_Sel_Perc").innerHTML = html;*/
	
	var oSelPercs = $("Sel_Perc_Cat");
	oSelPercs.remove(oSelPercs.length - 1);
	for (var i=0; i < defPercursos.length; i++)
	{
	    var elOptNew = document.createElement('option');
	    elOptNew.id = defPercursos[i][0];
        elOptNew.text = defPercursos[i][1];
        elOptNew.value = defPercursos[i][0];
        try {
            oSelPercs.add(elOptNew, null); // standards
        }
        catch(ex) {
            oSelPercs.add(elOptNew); // IE
        }
	}
	if (ID_PERCURSO != -1) oSelPercs.selectedIndex = ID_PERCURSO;
}

function escolherPercurso()
{
	IDT_MOUSE = { "clientX":480, "clientY": 295 };
	var oSel = $('Sel_Perc_Cat');
	/*if (oSel.selectedIndex == 0)
	{
		//alert("Por favor, selecione um percurso.");
		doTooltip(IDT_MOUSE, "Erro", "Por favor, selecione um percurso.");
		oSel.focus();
		return;
	}*/
	if(oSel.options[0].text == "Aguarde por favor..." || oSel.options[0].text == "Please wait...")
	    if(_Idioma == "PT")
	        janelaTxt("Erro", "Impossível obter percursos do servidor. Por favor, tente mais tarde ou contacte a AMDE.", 350, 250);
	    else if(_Idioma == "EN")
	        janelaTxt("Error", "It was not possible to get routes from the server. Please try again later or contact AMDE.", 350, 250);
	    
	var perc = oSel.options[oSel.selectedIndex].value;
	
	mMapa.persist.updatePercurso(perc);
	pedeMapa("PERCURSO",{"perc":perc});
}

function limparPercurso()
{
	mMapa.persist.updatePercurso('','');
	mapTipsShow = false;
	deleteNodes("theMap");
	pedeMapa('');
}

function criarMapTips()
{
	deleteNodes("theMap")

	if (mapTipsDados.length > 0)
	{	
		var dx = mMapa.extent.xmax - mMapa.extent.xmin;
		var dy = mMapa.extent.ymax - mMapa.extent.ymin;
		var tips = '';
		var html = new Array("","");
						
		for (i = 0 ; i < mapTipsDados.length ; i++)
		{	
			html[1] += '<div class="title" style="display:inline;">Ponto ' +  mapTipsDados[i][3] + ': </div>';
			//html[1] += '<div class="value" style="display:inline;"> ' + mapTipsDados[i][4] + ' </div><br>';
			html[1] += '<div class="value" style="display:inline;"> ' + mapTipsDados[i][4];
			html[1] += ' <a onclick="$(\'SPANdesignacao\').innerHTML = \'' + mapTipsDados[i][4] + '\';setBottomPanel(1);setPrxCoords(' + mapTipsEnvelopes[mapTipsDados[i][5]].xmin + ',' + mapTipsEnvelopes[mapTipsDados[i][5]].ymin + ')"><img id="" src="imagens/pesquisaproxb.png" title="Pesquisar nas proximidades" /></a></div><br>';
			
			if (mMapa.extent.xmax >= mapTipsEnvelopes[mapTipsDados[i][5]].xmax && mMapa.extent.xmin <= mapTipsEnvelopes[mapTipsDados[i][5]].xmin && mMapa.extent.ymin <= mapTipsEnvelopes[mapTipsDados[i][5]].ymin && mMapa.extent.ymax >= mapTipsEnvelopes[mapTipsDados[i][5]].ymax)
			{		
				x = (mapTipsEnvelopes[mapTipsDados[i][5]].xmin - mMapa.extent.xmin) * mMapa.width / dx;
				y = (mapTipsEnvelopes[mapTipsDados[i][5]].ymin - mMapa.extent.ymax) * mMapa.height / dy;
		
				var elem = makeDivTip(x,y,i,mapTipsDados[i][4],mapTipsDados[i][2])
				$("theMap").appendChild(elem);
			}
		}
								
		html[0]  = '<div class="title" style="display:inline;"><br>Percurso: </div>';
		html[0] += '<div class="value" style="display:inline;">' + $('Sel_Perc_Cat').options[$('Sel_Perc_Cat').selectedIndex].text + '</div><br>';
		html[0] += '<div class="title" style="display:inline;">' + mapTipsCampos[1] + ': </div>';
		html[0] += '<div class="value" style="display:inline;">' + mapTipsDados[0][1] + '</div><br>';
		
		$("descricaoPercuso").innerHTML = html[0] + html[1];
	}
}

function mysortfn(a,b) 
{
	if (a[3] < b[3]) return -1;
	if (a[3] > b[3]) return 1;
	return 0;
}


function sortPontos()
{
	//acrescentar a ordem com que veio para se utilizar os envelopes correctos.
	for (i = 0 ; i < mapTipsDados.length ; i++)
	{	
		mapTipsDados[i][5] = i;
	}
	
	mapTipsDados.sort(mysortfn)
}


function deleteNodes(element)
{
	var elem = $(element)
	
	for( var i=elem.childNodes.length; i > -1; i-- )
	{
		if (elem.childNodes[i] != undefined) 
		{
			if (elem.childNodes[i].id != "MAP")
			elem.removeChild(elem.childNodes[i]);
		}
	}
}


function makeDivTip(x,y,num,nome,desc)
{
	var elem = $("divTip" + num);

	if (!elem)
	{
		elem = document.createElement("div");
		elem.id ="divTip" + num ;
		elem.className = "classDivTip";
	}
	
	elem.style.left=Math.abs(parseInt(x)-7) + "px";
	elem.style.top=Math.abs(parseInt(y)+6) + "px";
	
	elem.onmouseover = function(e) { evt = e || event; doTooltip(evt,nome,desc);}
	elem.onmouseout = function() { hideTip(); }
		
	return elem;
}

