//////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES PUBLICAS QUE SE PUEDEN LLAMAR DESDE LA PAGINA HTML
//////////////////////////////////////////////////////////////////////////////////////////

var m_bElementoEncontrado=false;

// Funcion para situar el mapa en un punto
function html2flash(posiciox,posicioy,posicioz,txtResult)
{

  nueva_x = posiciox;
  nueva_y = posicioy;
  nueva_z = posicioz;
	if (window.parent.document.mapa!='')
	{
		oMapa=window.parent.document.mapa;
	}
	else
	{
		oMapa=window.document.mapa;
	}

	if (!oMapa) oMapa=ObtenerMapaGuiaUrbana();
	Buscar(oMapa,Math.round(posiciox*15),Math.round(posicioy*15),Math.round(posicioz),txtResult,true);
}

function ActivarOpcionDistancias()
{
	RealizarAccionMapa('Distancias');
}

function ActivarOpcionMover()
{
	RealizarAccionMapa('Mover');
}

function ActivarOpcionZoomMas()
{
	RealizarAccionMapa('ZoomMas');
}

function ActivarOpcionZoomMenos()
{
	RealizarAccionMapa('ZoomMenos');
}

function RealizarAccionCentrar()
{
	RealizarAccionMapa('Centrar');
}

function RealizarAccionImprimir()
{
	RealizarAccionMapa('Imprimir');
}

function AplicarZoomInput()
{
	var oTxtEscala=document.getElementById('txtEscala');
	if (oTxtEscala)	AplicarZoomEspecifico(oTxtEscala.value);
}

function AplicarZoom(sMetros)
{
	var oMapa=ObtenerMapaGuiaUrbana();
	oMapa.SetVariable("sMetrosZoom",sMetros);
  oMapa.TCallLabel('_root', 'Zoom');
}

function ActivarDesactivarCapa(sIdCapaActivar, iEntidad)
{
	var oMapa=ObtenerMapaGuiaUrbana();
	oMapa.SetVariable("sIdCapaActivar",sIdCapaActivar);
  oMapa.TCallLabel('_root', 'ActivarCapa');
  
  if (aCapasEntidades[iEntidad]['selec'])
	{
		document.getElementById(sIdCapaActivar).src="../img/iconos/icon_NOVISIBLE.gif";
		aCapasEntidades[iEntidad]['selec']=false;
	}
	else
	{
		document.getElementById(sIdCapaActivar).src="../img/iconos/icon_VISIBLE.gif";
		aCapasEntidades[iEntidad]['selec']=true;
	} 
}

function ActivarDesactivarGrupoCapasCar(sIdGrupoCapaActivar, iGrupo)
{
	var oMapa=ObtenerMapaGuiaUrbana();
	oMapa.SetVariable("sIdCapaActivar",iGrupo);
  oMapa.TCallLabel('_root', 'ActivarCapaCar');
  
  if (aCapasCartografia[iGrupo-1]['selec'])
	{
		document.getElementById(sIdGrupoCapaActivar).src="../img/iconos/icon_NOVISIBLE.gif";
		aCapasCartografia[iGrupo-1]['selec']=false;
	}
	else
	{
		document.getElementById(sIdGrupoCapaActivar).src="../img/iconos/icon_VISIBLE.gif";
		aCapasCartografia[iGrupo-1]['selec']=true;
	} 
}

function InicializarGuiaUrbana()
{
		//Anadimos el elemento 'Todas' al combo
		var oOption;
		var oCboCapa=document.getElementById('cboCapaEn');
		if (oCboCapa)
		{
			oOption=document.createElement("OPTION");
			oCboCapa.options.add(oOption);
			oOption.innerText=sLitTodasCapas;
			oOption.value="*";
		
			//Cargamos combo de capas
			for (i=0;i<aCapasEntidades.length;i++)
			{
				oOption=document.createElement("OPTION");
				oCboCapa.options.add(oOption);
				oOption.innerText=aCapasEntidades[i]['nombre'];
				oOption.value=aCapasEntidades[i]['id'];
			}
		}
		
		
		//Seleccionamos el elemento indicado
		window.setTimeout("IniBuscarElementoGuiaUrbana()",1000);
}


function verCartografia()
{
	cadena="";
	if (typeof(aCapasCartografia)!="undefined")
	{
		for (i=0;i<aCapasCartografia.length;i++)
		{
			cadena=cadena + '<div class="cartografia">';
			if (aCapasCartografia[i]['selec'])
				cadena=cadena + '<img id="' + aCapasCartografia[i]['id'] + '" src="../img/iconos/icon_VISIBLE.gif"'
			else
				cadena=cadena + '<img id="' + aCapasCartografia[i]['id'] + '" src="../img/iconos/icon_NOVISIBLE.gif"';
			cadena=cadena + 'onClick=javascript:ActivarDesactivarGrupoCapasCar("' + aCapasCartografia[i]['id'] + '",' + (i+1) + '); ></img> ';
			//cadena=cadena + '<img src="' + aCapasCartografia[i]['imagen'] + '">';
			cadena=cadena + aCapasCartografia[i]['nombre'] + '</div>'
		}
		document.write(cadena);
	}
}

function verOrtofotos()
{
	cadena="";
	if (typeof(aCapasCartografia)!="undefined")
	{
		if(aCapasCartografia[0]['nombre'].toUpperCase() == "ORTOFOTOS");
		{
			cadena=cadena + '<div class="cartografia">';
			if (aCapasCartografia[0]['selec'])
				cadena=cadena + '<img id="' + aCapasCartografia[0]['id'] + '" src="../img/iconos/icon_VISIBLE.gif"'
			else
				cadena=cadena + '<img id="' + aCapasCartografia[0]['id'] + '" src="../img/iconos/icon_NOVISIBLE.gif"';
			cadena=cadena + 'onClick=javascript:ActivarDesactivarGrupoCapasCar("' + aCapasCartografia[0]['id'] + '",1); ></img> ';
			//cadena=cadena + '<img src="' + aCapasCartografia[0]['imagen'] + '">';
			cadena=cadena + aCapasCartografia[0]['nombre'] + '</div>'
			document.write(cadena);
		}
	}
}

function verEntidades()
{
	cadena="";
	if (typeof(aCapasEntidades)!="undefined")
	{
		for (i=0;i<aCapasEntidades.length;i++)
		{
			cadena=cadena + '<div class="entidad">';
			if (aCapasEntidades[i]['selec'])
				cadena=cadena + '<img id="' + aCapasEntidades[i]['id'] + '" src="../img/iconos/icon_VISIBLE.gif"'
			else
				cadena=cadena + '<img id="' + aCapasEntidades[i]['id'] + '" src="../img/iconos/icon_NOVISIBLE.gif"';
			cadena=cadena + 'onClick=javascript:ActivarDesactivarCapa("' + aCapasEntidades[i]['id'] + '",' + i + '); ></img> ';
			//cadena=cadena + '<img src="' + aCapasEntidades[i]['imagen'] + '">';
			cadena=cadena + aCapasEntidades[i]['nombre'] + '</div>'
		}
		document.write(cadena);
	}
}


//////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES PRIVADAS QUE NO SE PUEDEN LLAMAR DESDE LA PAGINA HTML
//////////////////////////////////////////////////////////////////////////////////////////

// Funcion para la comunicacion entre la Guia Urbana y la pagina HTML
function mapa_DoFSCommand(command, args) 
{
  if (command=="abrirVentana")
	{
		var aParametros;
		
		aParametros=args.split("|");
		switch(aParametros[0])
		{
			case '0': //Nueva ventana normal
				GestionarEnlace(aParametros[4],aParametros[3],aParametros[2],1,1,'');
				break;
			
			case '1': //Nueva ventana simple
				GestionarEnlace(aParametros[4],aParametros[3],aParametros[2],0,1,'');
				break;

			case '2': //En un frame de la ventana actual
				GestionarEnlace(aParametros[4],0,0,0,0,aParametros[1]);
				break;

			case '3': //En la misma ventana
				GestionarEnlace(aParametros[4],0,0,0,0,'');
				break;
		}
	}
	else if (command=="ESCALA")
	{
		ZoomMapaModificado(args);
	}
	else if (command=="VISTA_AEREA")
	{
		//Obtenemos coordenadas actuales de la guia urbana
		var oMapa=ObtenerMapaGuiaUrbana();
		try
		{
			var dX=oMapa.GetVariable('_root.xcoord');
			var dY=oMapa.GetVariable('_root.ycoord');
			var dZ=oMapa.GetVariable('_root.zcoord');
			//Calculamos el tamano del cuadro de la vista aerea
			var ancho_vista_cuadro = (500 / 4800) * (100/dZ); // (30000/6.25)=4800
			var alto_vista_cuadro = (400 / 4800) * (100/dZ);
			var x_vista_cuadro = (dX / 4800);
			var y_vista_cuadro = (dY / 4800);
			//Actualizamos la vista aerea
			var oVistaAerea=ObtenerMapaVistaAerea();
			if (oVistaAerea)
			{
				oVistaAerea.SetVariable("_root.sAnchura",ancho_vista_cuadro.toString());
				oVistaAerea.SetVariable("_root.sAltura",alto_vista_cuadro.toString());
				oVistaAerea.SetVariable("_root.sX",x_vista_cuadro.toString());
				oVistaAerea.SetVariable("_root.sY",y_vista_cuadro.toString());
				oVistaAerea.TCallLabel('_root','MostrarCuadro');
			}
		}
		catch(e){}
	}
	else if ((command=='estado_mapa') && (args=='true'))
	{
		//IniBuscarElementoGuiaUrbana();
	}
}

function Buscar(oMapa,x,y,z,txtBusqueda,bPosicionarIndicador)
{
	if (oMapa)
	{
		//Posición del mapa		
		oMapa.SetVariable("xcoord",x);
	  oMapa.SetVariable("ycoord",y);
	  oMapa.SetVariable("zcoord",z);
	  oMapa.SetVariable("txtBusq",txtBusqueda);
	
	  //Posición del indicador de posición
	  if (bPosicionarIndicador)
	  {
			oMapa.SetVariable("xindicador",x);
			oMapa.SetVariable("yindicador",y);
		}

		//Buscamos
		oMapa.TCallLabel('_root', 'Buscar');
	}
}

// Funcion para obtener el mapa de la Guia Urbana
function ObtenerMapaGuiaUrbana()
{
	return window.document.mapa;	
}

// Funcion para obtener el mapa de la vista aerea
function ObtenerMapaVistaAerea()
{
	return window.document.vistaAerea;
}

function RealizarAccionMapa(sAccion)
{
	var oMapa=ObtenerMapaGuiaUrbana();
  oMapa.TCallLabel('_root', sAccion);
}

// Funcion para la comunicacion entre la Vista Aerea y la pagina HTML
function vistaAerea_DoFSCommand(command, args) 
{
	var aParametros=args.split("|");
	
	if (command=="VISTA_AEREA")
	{
		var dX=aParametros[0]*4800;
		var dY=aParametros[1]*4800;
		var oMapa=ObtenerMapaGuiaUrbana();
		var dZ=oMapa.GetVariable("_root.zcoord");
		Buscar(oMapa,dX,dY,dZ,'',false);
	}

}

function IniBuscarElementoGuiaUrbana()
{
	if (!m_bElementoEncontrado)
	{
	  x="";
	  y="";
	  z="";
		sParametros=window.location.search;
		if (sParametros.length>0)
		{
			if (sParametros.substr(0,1)=='?') 
			{
				sParametros=sParametros.substr(1);
				aParam=sParametros.split('&');
				for(i=0; i<aParam.length; i++)
				{
					sParam=aParam[i];
					aPareja=sParam.split('=');
					if (aPareja.length==2)
					{
						if (aPareja[0].toLowerCase()=='x'){x=aPareja[1];}
						if (aPareja[0].toLowerCase()=='y'){y=aPareja[1];}
						if (aPareja[0].toLowerCase()=='z'){z=aPareja[1];}
						if (aPareja[0].toLowerCase()=='busq'){texto=aPareja[1];}
					}
				}
			}
		}
		if ((x!='')&&(y!='')&&(z!=''))
		{	
			try
			{
				html2flash(x,y,z,URLDecode(texto));
				m_bElementoEncontrado=true;
			}
			catch(e)
			{
				window.setTimeout("IniBuscarElementoGuiaUrbana()",1000);
			}
		}
	}
}

function URLDecode(texto)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = texto;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}


function ZoomMapaModificado(sMetros)
{			
	var oTxtEscala=document.getElementById('txtEscala');
	if (oTxtEscala)	oTxtEscala.value=sMetros;
}

function reescala()
{
	if (parseInt(navigator.appVersion)>3) 
	{
		if (navigator.appName=="Netscape") { winWidth = window.innerWidth; winHeight = window.innerHeight;}
		if (navigator.appName.indexOf("Microsoft")!=-1) { winWidth = document.body.offsetWidth;	winHeight = document.body.offsetHeight;}
	}
	anchuraFlash = Math.round(winWidth - 400);
	alturaFlash = Math.round(anchuraFlash / 1.25);
	if (navigator.appName.indexOf("Microsoft")!=-1)
	{
		document.getElementById("mapa").style.width=anchuraFlash;
		document.getElementById("mapa").style.height=alturaFlash;
	}
	else
	{
		document.location = document.location;
	}
}