//////////////////////////////////////////////////////////////////////////////////////////
// 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'])
	{
		oImgCapa = document.getElementById(sIdGrupoCapaActivar);
		if (oImgCapa) oImgCapa.src="../img/iconos/icon_NOVISIBLE.gif";
		
		if (iGrupo == 1)
		{
			oOrtoAlt = document.getElementById("orto_" + sIdGrupoCapaActivar);
			if (oOrtoAlt)
				oOrtoAlt.src="../img/iconos/icon_NOVISIBLE.gif";
		}
			
		aCapasCartografia[iGrupo-1]['selec']=false;
	}
	else
	{
		oImgCapa = document.getElementById(sIdGrupoCapaActivar);
		if(oImgCapa) oImgCapa.src="../img/iconos/icon_VISIBLE.gif";
		
		if (iGrupo == 1)
		{
			oOrtoAlt = document.getElementById("orto_" + sIdGrupoCapaActivar);
			if (oOrtoAlt)
				oOrtoAlt.src="../img/iconos/icon_VISIBLE.gif";
		}
		
		aCapasCartografia[iGrupo-1]['selec']=true;
	} 
}

function ActivarDesactivarOrtos(sIdGrupoCapaActivar, iGrupo)
{
	var oMapa=ObtenerMapaGuiaUrbana();
	oMapa.SetVariable("sIdCapaActivar",iGrupo);
  oMapa.TCallLabel('_root', 'ActivarCapaCar');
  
  if (aCapasCartografia[iGrupo-1]['selec'])
	{
		document.getElementById("orto_" + sIdGrupoCapaActivar).src="../img/iconos/icon_NOVISIBLE.gif";
		
		oOrtoAlt = document.getElementById(sIdGrupoCapaActivar);
		if (oOrtoAlt)
			oOrtoAlt.src="../img/iconos/icon_NOVISIBLE.gif";
		
		aCapasCartografia[iGrupo-1]['selec']=false;
	}
	else
	{
		document.getElementById("orto_" + sIdGrupoCapaActivar).src="../img/iconos/icon_VISIBLE.gif";
		
		oOrtoAlt = document.getElementById(sIdGrupoCapaActivar);
		if (oOrtoAlt)
			oOrtoAlt.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++)
			{
				oCboCapa.options[oCboCapa.options.length] = new Option(aCapasEntidades[i]['nombre'], aCapasEntidades[i]['id']);
			}
		}
		
		
		//Seleccionamos el elemento indicado
		window.setTimeout("IniBuscarElementoGuiaUrbana()",1000);
}

function verCartografia()
{
	if (typeof(sModo)!="undefined") 
	{
		document.write('<div id="lstCapasCarto">');
		document.write(obtenerListaCapasCarto(sModo));
		document.write('</div>');
	}
}


function obtenerListaCapasCarto(modo)
{
	cadena="";
	if (typeof(aCapasCartografia)!="undefined")
	{		
		for (i=0;i<aCapasCartografia.length;i++)
		{
			if ((modo == 'DETALLE') || ((modo == 'NORMAL') && (aCapasCartografia[i]['detalle'] == 'N')))
			{
				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>';
			}
		}
		return (cadena);
	}
	else
	{
		return ("");
	}
}



function verOrtofotos()
{
	if (typeof(sModo)!="undefined") 
	{
		document.write('<div id="lstCapasOrtos">');
		document.write(obtenerListaCapasOrtos(sModo));
		document.write('</div>');
	}
}
	
	

function obtenerListaCapasOrtos(modo)
{
	cadena="";
	if (typeof(aCapasCartografia)!="undefined")
	{		
		if(aCapasCartografia[0]['nombre'].toUpperCase() == "ORTOFOTOS");
		{
			if ((modo == 'DETALLE') || ((modo == 'NORMAL') && (aCapasCartografia[0]['detalle'] == 'N')))
			{
				cadena=cadena + '<div class="cartografia">';
				if (aCapasCartografia[0]['selec'])
					cadena=cadena + '<img id="orto_' + aCapasCartografia[0]['id'] + '" src="../img/iconos/icon_VISIBLE.gif"';
				else
					cadena=cadena + '<img id="orto_' + aCapasCartografia[0]['id'] + '" src="../img/iconos/icon_NOVISIBLE.gif"';
				cadena=cadena + 'onClick=javascript:ActivarDesactivarOrtos("' + aCapasCartografia[0]['id'] + '",1); ></img> ';
				//cadena=cadena + '<img src="' + aCapasCartografia[0]['imagen'] + '">';
				cadena=cadena + aCapasCartografia[0]['nombre'] + '</div>';
			}
		}
	}
	return (cadena);
}



function verModoVisualizacion()
{
	if (typeof(sModo)!="undefined") 
	{
		document.write('<div id="cambioModo" class="modoVisual">');
		document.write(obtenerEnlaceCambioModo(sModo));
		document.write('</div>');
	}
}

function obtenerEnlaceCambioModo(modo)
{
	if (modo == 'DETALLE')
		return ('<a href="javascript:setModoVisualizacionNormal();"><img src="../img/iconos/icon_VISIBLE.gif" />' + sLitModoDetalle + '</a>');
	else
		return ('<a href="javascript:setModoVisualizacionDetalle();"><img src="../img/iconos/icon_NOVISIBLE.gif" />' + sLitModoDetalle + '</a>');
}


function setModoVisualizacionNormal()
{
	if (typeof(sModo)!="undefined") 
	{
		// Actualizamos variable global
		sModo = 'NORMAL';

		propagarModoActualCamposHiddenForms(sModo);
	
		// Actualizar modo en el mapa
		RealizarAccionMapa('ModoNormal');
		
		actualizarTextosSegunModoActual();
	}
}

function setModoVisualizacionDetalle()
{
	if (typeof(sModo)!="undefined") 
	{
		// Actualizamos variable global
		sModo = 'DETALLE';
		
		propagarModoActualCamposHiddenForms(sModo);
		
		// Actualizar modo en el mapa
		RealizarAccionMapa('ModoDetalle');
		
		actualizarTextosSegunModoActual();
	}
}

function propagarModoActualCamposHiddenForms(sModo)
{
	elems = document.getElementsByName('txtModoActual');
	
	for (i=0;i<elems.length;i++)
		elems[i].value = sModo;
}

function actualizarTextosSegunModoActual()
{	
	//Cambiar el texto del link que cambia el modo
	oCambioModo = document.getElementById('cambioModo');
	if (oCambioModo)
		oCambioModo.innerHTML = obtenerEnlaceCambioModo(sModo);

	// Actualizar la lista para mostrar o no capas cartograficas
	oCapasCarto = document.getElementById('lstCapasCarto');
	if (oCapasCarto)
		oCapasCarto.innerHTML = obtenerListaCapasCarto(sModo);

	// Actualizar el item para mostrar o no ortofotos
	oCapasOrtos = document.getElementById('lstCapasOrtos');
	if (oCapasOrtos)
		oCapasOrtos.innerHTML = obtenerListaCapasOrtos(sModo);	
}

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 (aPareja[0].toLowerCase()=='modo')
						{
							if (aPareja[1].toUpperCase()=='NORMAL')
								RealizarAccionMapa('ModoNormal');
							else
								RealizarAccionMapa('ModoDetalle');
						}
					}
				}
			}
		}
		if ((x!='')&&(y!='')&&(z!=''))
		{	
			try
			{
				html2flash(x,y,z,URLDecode(texto));
				m_bElementoEncontrado=true;
			}
			catch(e)
			{
				window.setTimeout("IniBuscarElementoGuiaUrbana()",1000);
			}
		}
	}
	propagarModoActualCamposHiddenForms(sModo);
}

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;
	}
}