// -----------------------------------------------------------------------------
// scripts for pages containing google maps
// ----------------------------------------

var map, oldzoom, minzoom;
var level0markers = [];
var level1markers = [];
var panomarkers = [];

// init the google maps system for the home page
// =============================================
function mp_gh_init(relpath, zli)
{
  if (true || GBrowserIsCompatible())
  {
    // create map object
    // -----------------
    map = new GMap2(document.getElementById("map_canvas"));
    
    // basic view & control parameters
    // -------------------------------
    oldzoom = 1 + zli;
    minzoom = oldzoom;
    map.setCenter(new GLatLng(20, 0), oldzoom);
    map.addMapType(G_PHYSICAL_MAP);
    map.addMapType(G_SATELLITE_3D_MAP);
    map.addControl(new GLargeMapControl3D());
    map.addControl(new GMenuMapTypeControl());
    map.setMapType(G_SATELLITE_MAP);
    map.enableContinuousZoom();
    map.enableScrollWheelZoom();
    map.enableDoubleClickZoom();
    map.enableContinuousZoom();

    GEvent.addListener(map, "zoomend", function(oldzoom_not_usable, newzoom) {

      if (newzoom < minzoom)
      {
        map.setZoom(minzoom);
        newzoom = minzoom;
      }
      
      if (oldzoom > 3+zli && newzoom <= 3+zli)
        for (var i = 0; i < level0markers.length; i++) 
          level0markers[i].show();
      if (oldzoom <= 3+zli && newzoom > 3+zli)
        for (var i = 0; i < level0markers.length; i++) 
          level0markers[i].hide();

      if ((oldzoom <= 3+zli || oldzoom >= 7+zli) && (newzoom > 3+zli && newzoom < 7+zli))
        for (var i = 0; i < level1markers.length; i++) 
          level1markers[i].show();
      if ((oldzoom > 3+zli && oldzoom < 7+zli) && (newzoom <= 3+zli || newzoom >= 7+zli))
        for (var i = 0; i < level1markers.length; i++) 
          level1markers[i].hide();

      if (oldzoom < 7+zli && newzoom >= 7+zli)
        for (var i = 0; i < panomarkers.length; i++) 
          panomarkers[i].show();
      if (oldzoom >= 7+zli && newzoom < 7+zli)
        for (var i = 0; i < panomarkers.length; i++) 
          panomarkers[i].hide();
          
      oldzoom = newzoom;
    });

    GDownloadUrl(relpath + "___g/___m.xml", function(data) 
    {
      var xml = GXml.parse(data);
      
      // make level 0 markers
      // --------------------
      var l0groups = xml.documentElement.getElementsByTagName("l0group");
      for (var i = 0; i < l0groups.length; i++) 
      {
        var idp = l0groups[i].getAttribute("Id");
        var lat = parseFloat(l0groups[i].getAttribute("lat"));
        var lon = parseFloat(l0groups[i].getAttribute("lon"));
        var point = new GLatLng(lat,lon);
        var  icon = new GIcon();
        icon.image = relpath + '___g/m_' + idp + '.png';
        icon.shadow = relpath + '___g/shadow_r.png';
        icon.iconSize = new GSize(64, 64);
        icon.shadowSize = new GSize(97, 64);
        icon.iconAnchor = new GPoint(32, 63);
        icon.infoWindowAnchor = new GPoint(32, 1);
        var marker = new GMarker(point, {'icon': icon, 'hide': false});
        marker.idp = idp;
        marker.targetpoint = new GLatLng(parseFloat(l0groups[i].getAttribute("targetlat")), parseFloat(l0groups[i].getAttribute("targetlon")));
        marker.targetzoom = parseFloat(l0groups[i].getAttribute("targetzoom")) + zli;
        GEvent.addListener(marker, 'click', click_level0_marker);
        map.addOverlay(marker);
        level0markers.push(marker);
      }
      
      // make level 1 markers
      // --------------------
      var l1groups = xml.documentElement.getElementsByTagName("l1group");
      for (var i = 0; i < l1groups.length; i++) 
      {
        var idp = l1groups[i].getAttribute("Id");
        var lat = parseFloat(l1groups[i].getAttribute("lat"));
        var lon = parseFloat(l1groups[i].getAttribute("lon"));
        var point = new GLatLng(lat,lon);
        var  icon = new GIcon();
        icon.image = relpath + '___g/m_' + idp + '.png';
        icon.shadow = relpath + '___g/shadow_r.png';
        icon.iconSize = new GSize(64, 64);
        icon.shadowSize = new GSize(97, 64);
        icon.iconAnchor = new GPoint(32, 63);
        icon.infoWindowAnchor = new GPoint(32, 1);
        var marker = new GMarker(point, {'icon': icon, 'hide': true});
        marker.idp = idp;
        marker.targetpoint = new GLatLng(parseFloat(l1groups[i].getAttribute("targetlat")), parseFloat(l1groups[i].getAttribute("targetlon")));
        marker.targetzoom = parseFloat(l1groups[i].getAttribute("targetzoom")) + zli;
        GEvent.addListener(marker, 'click', click_level1_marker);
        map.addOverlay(marker);
        level1markers.push(marker);
      }
      
      // make pano markers
      // -----------------
      var panos = xml.documentElement.getElementsByTagName("pano");
      for (var i = 0; i < panos.length; i++) 
      {
        var idp = panos[i].getAttribute("Id");
        var lat = parseFloat(panos[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue);
        var lon = parseFloat(panos[i].getElementsByTagName("lon")[0].childNodes[0].nodeValue);
        var point = new GLatLng(lat,lon);
        var  icon = new GIcon();
        icon.image = relpath + '___p/_panos/' + idp + '/' + idp + '_g0.png';
        icon.shadow = relpath + '___g/shadow_g0.png';
        icon.iconSize = new GSize(18, 33);
        icon.shadowSize = new GSize(35, 33);
        icon.iconAnchor = new GPoint(9, 33);
        icon.infoWindowAnchor = new GPoint(9, 0);
        var marker = new GMarker(point, {'icon': icon, 'hide': true});
        marker.idp = idp;
        marker.relpath = relpath;
        marker.bigicon = null;
        GEvent.addListener(marker, 'mouseover', mouseover_pano_marker);
        GEvent.addListener(marker, 'click', click_pano_marker);
        map.addOverlay(marker);
        panomarkers.push(marker);
      }
    });

  }
}

// click handler for level 0 marker
// ================================
function click_level0_marker()
{
  map.setCenter(this.targetpoint, this.targetzoom);
}

// click handler for level 1 marker
// ================================
function click_level1_marker()
{
  map.setCenter(this.targetpoint, this.targetzoom);
}

// mouseover handler for pano marker
// =================================
function mouseover_pano_marker(latlon)
{
  for (var i = 0; i < panomarkers.length; i++) 
    if (panomarkers[i].bigicon != null)
      panomarkers[i].bigicon.hide();

  if (this.bigicon == null)
  {
    var  icon = new GIcon();
    icon.image = this.relpath + '___p/_panos/' + this.idp + '/' + this.idp + '_g1.png';
    icon.shadow = this.relpath + '___g/shadow_g1.png';
    icon.iconSize = new GSize(150, 88);
    icon.shadowSize = new GSize(195, 88);
    icon.iconAnchor = new GPoint(80, 88);
    icon.infoWindowAnchor = new GPoint(74, 0);
    var marker = new GMarker(this.getLatLng(), {'icon': icon, 'hide': true, 'zIndexProcess': setPrioZOrder});
    marker.smallicon = this;
    marker.idp = this.idp;
    marker.relpath = this.relpath;
    GEvent.addListener(marker, 'click', click_pano_marker);
    GEvent.addListener(marker, 'mouseout', mouseout_pano_marker);
    this.bigicon = marker;
    map.addOverlay(marker);
  }
  this.hide();
  if (this.bigicon != null) this.bigicon.show();
}

// set high prio for big pano marker
// =================================
function setPrioZOrder(marker, b)
{
  return 1000000;
}

// mouseout handler for pano marker
// ================================
function mouseout_pano_marker(latlon)
{
  this.hide();
  if (this.smallicon != null) this.smallicon.show();
}

// click handler for pano marker
// =============================
function click_pano_marker()
{
  mp_c_openPanoFs(this.relpath + '___p/___p.html?panoid=' + this.idp);
}
