/* Funciones para manipular el mapa.
 * Autor: Ignacio Sánchez <isanchez(a)visionados.com>
 *	  Guillermo Martínez <gmartinez(a)visionados.com>
 */

/* El objeto mapa, imágen usada como marcador. */
  var Mapa = null, Icono = null;




/* Inicialización. */
  function InicializaModulo (IdDiv)
  {
    try {
      var Ndx, Control;

      if (!GBrowserIsCompatible ())
	throw "Navegador NO compatible.";
    // Llenamos la lista de provincias.
      Control = document.getElementById ("provincias");
      Control.options.length = Provincias.length;
      for (Ndx=0; Ndx<Provincias.length; Ndx++) {
	Control.options[Ndx].value = Ndx;
	Control.options[Ndx].text = Provincias[Ndx].nombre;
      }
      Control.options.selectedIndex = 3;
    // Creamos el mapa.
      if (!Icono) {
	Icono = new google.maps.Icon();
	Icono.image = "./globito.gif";
	Icono.iconSize = new google.maps.Size (32, 26);
	Icono.iconAnchor = new google.maps.Point (14, 25);
	Icono.shadow = "";
      }
      if (Mapa)
	delete Mapa;
      Mapa = new google.maps.Map2 (document.getElementById (IdDiv));
      Mapa.addControl (new google.maps.LargeMapControl ());
      Mapa.addControl (new google.maps.MapTypeControl ());
      Mapa.addControl (new google.maps.ScaleControl ());
      for (Ndx=1; Ndx<datos.length; Ndx++)
	AnnadePuntoInteres (datos[Ndx][9], datos[Ndx][10],
			    GeneraHTMLPuntoInteres (datos[Ndx]));
    // Posición central.
      Mapa.setCenter (new google.maps.LatLng (37, -9), 5);
    }
    catch (Error) {
      alert (Error);
    }
  }



/* Centra la provincia seleccionada. */
  function BuscaProvincia ()
  {
    var Ndx, Zoom = 8;

    try {
      Ndx = document.getElementById ("provincias").options.selectedIndex;
      if (Ndx == 3)
	return false;
      if (typeof (Provincias[Ndx].zoom) != "undefined")
	Zoom = Provincias[Ndx].zoom;
      Mapa.setCenter (new google.maps.LatLng (
	Provincias[Ndx].latitud, Provincias[Ndx].longitud), Zoom);
    }
    catch (Error) {
      alert (Error);
    }
    delete Buscador;
    return false;
  }



/* Devuelve la cadena HTML con lo que debe mostrarse en la ventana. */
  function GeneraHTMLPuntoInteres (DatosPunto)
  {
    var Resultado, Latitud, Longitud;

    Resultado = "<table border='0' width='100%' cellpadding='3'><tr><td colspan='2'><dd class='razon'>"+DatosPunto[RAZON_SOCIAL]+"</dd></td></tr>"+
      "<tr><td width='60%'><dt class='dir'>Direcci&oacute;n:</dt><dd class='txt'>"+DatosPunto[DIRECCION]+"<br />";
    if (DatosPunto[POLIGONO] != "")
      Resultado += DatosPunto[POLIGONO]+"<br />";
    Resultado += DatosPunto[CP]+" "+DatosPunto[LOCALIDAD]+"<br/> "+DatosPunto[PROVINCIA]+"</dd>"+
      "</dl><br/>"+"<dt class='dir'>Tel&eacute;fono:</dt><dd class='txt'>"+DatosPunto[TELEFONO]+"</dd>"+
      "<dt class='dir'>Fax:</dt><dd class='txt'>"+DatosPunto[TELEFONO2]+"</dd></td><td><dt class='dir'>Email:</dt><dd class='txt'><NOBR><a href='mailto:"+DatosPunto[EMAIL]+"' >"+DatosPunto[EMAIL]+"</a></NOBR></dd><br/>"+
      "<dt class='dir'>Horario:</dt>Lunes a Viernes:<dd class='txt'>"+DatosPunto[HORARIO]+"</dd>";
    if(DatosPunto[HORARIO2] != "")
      Resultado += "Sabado:<dd class='txt'>"+DatosPunto[HORARIO2]+"</dd>";
    Latitud = ParseGrados (DatosPunto[LATITUD]);
    if (DatosPunto[LATITUD] < 0)
      Latitud += ' S';
    else
      Latitud += ' N';
    Longitud = ParseGrados (DatosPunto[LONGITUD]);
    if (DatosPunto[LONGITUD] < 0)
      Longitud += ' O';
    else
      Longitud += ' E';
    return "<dl class='txt'>"+Resultado +
      "</td></tr><tr><td colspan='2' align='right'><img src='logo_service.png'/></td></tr><tr><td colspan='2' align='right'><div class='lat'><b>Latitud: </b>"+
      Latitud+" / <b>Longitud: </b>"+Longitud+"</div></td></tr></table>";
  }



/* Añade un marcador con un texto asociado a mostrar.
 * Devuelve el objeto marcador. */
  function AnnadePuntoInteres (Latitud, Longitud, Texto)
  {
    var Marcador = AnnadePunto (Latitud, Longitud);

    Marcador.Texto = Texto;
    google.maps.Event.addListener (Marcador, "click", function ()
    {
      Mapa.openInfoWindowHtml (this.getLatLng (), this.Texto);
    });
    return Marcador;
  }



/* Añade un punto al mapa.
 * Devuelve el objeto marcador. */
  function AnnadePunto (Latitud, Longitud)
  {
    var Marcador;

    Mapa.addOverlay (
      Marcador = new google.maps.Marker (
	new google.maps.LatLng (Latitud, Longitud, false), {icon: Icono}
      )
    );
    return Marcador;
  }



/* Convierte el valor decimal en valor hexagesimal. */
  function ParseGrados (Valor)
  {
    var Tmp, Grados, Minutos, Segundos;

    Grados = Math.floor (Math.abs (Valor));
    Tmp = Math.abs (Valor) - Grados;
    Tmp *= 60;
    Minutos = Math.floor (Tmp);
    Tmp -= Minutos;
    Tmp *= 60;
    Segundos = Math.floor (Tmp);

    return Grados + "º " + Minutos + "' " + Segundos + '"';
  }

