var map;
var icon_blog;
var icon_country;
var autoload = true;

var debug = false;

// **************************************************************************
// initialize google map
// **************************************************************************
function load() {
  if (GBrowserIsCompatible()) {

    // create blog marker icon
    icon_blog= new GIcon();
    icon_blog.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    icon_blog.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon_blog.iconSize = new GSize(12, 20);
    icon_blog.shadowSize = new GSize(22, 20);
    icon_blog.iconAnchor = new GPoint(6, 20);
    icon_blog.infoWindowAnchor = new GPoint(5, 1);

    // create country marker icon
    icon_country = new GIcon();
    icon_country.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
    icon_country.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon_country.iconSize = new GSize(12, 20);
    icon_country.shadowSize = new GSize(22, 20);
    icon_country.iconAnchor = new GPoint(6, 20);
    icon_country.infoWindowAnchor = new GPoint(5, 1);

    // create map
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(10.833305983642504, 15.46875), 3);
    map.enableContinuousZoom();
    map.enableDoubleClickZoom();

    // enable keyboard support
    new GKeyboardHandler(map);

    // add zoom listener
    GEvent.addListener(map, "moveend", loadGpsData);

    // just for testing...
    if (debug){
      GEvent.addListener(map, "click", function(overlay, point) {
        document.getElementById("message").innerHTML = point;
      });
    }

    // load gps data
    loadGpsData();

  }
}

// **************************************************************************
// loads the gps data into google map
// **************************************************************************
function loadGpsData() {
  if (autoload) {

    // clear all points and markers
    map.clearOverlays();

    if (false && map.getZoom() < 4){

      // add country markers
      GDownloadUrl("list_country_gps_included.xml", function(data, responseCode) {
        var countryXml = GXml.parse(data);
        var countryMarkers = countryXml.documentElement.getElementsByTagName("marker");
        var countryMarker = [];

        if (countryMarkers.length > 0) {
          for (var i = 0; i < countryMarkers.length; i++) {
            var point = new GLatLng(parseFloat(countryMarkers[i].getAttribute("lat")),
                                    parseFloat(countryMarkers[i].getAttribute("lng")));

            map.addOverlay(createCountryMarker(point, countryMarkers[i].getAttribute("url"), 
                                                        countryMarkers[i].getAttribute("title")));
          }
        }
      });

    } else {

      // add blog markers
      GDownloadUrl("list_blog_gps_included.xml", function(data, responseCode) {
        var blogXml = GXml.parse(data);
        var blogMarkers = blogXml.documentElement.getElementsByTagName("marker");
        var blogMarker = [];

        if (blogMarkers.length > 0) {
          for (var i = 0; i < blogMarkers.length; i++) {
            var point = new GLatLng(parseFloat(blogMarkers[i].getAttribute("lat")),
                                    parseFloat(blogMarkers[i].getAttribute("lng")));

            map.addOverlay(createBlogMarker(point, blogMarkers[i].getAttribute("url"), 
                                                        blogMarkers[i].getAttribute("date"), 
                                                        blogMarkers[i].getAttribute("title")));
          }
        }
      });
    }

    // read points from xml data
    var bounds = map.getBounds();
    var sw = bounds.getSouthWest();
    var ne = bounds.getNorthEast();

    // route 1 (Switzerland - Ghana)
    drawRoute(map, 1, "#FF0000", 5, 0.9, bounds, sw, ne);

    // route 2 (Flight Ghana - South Africa)
    // drawRoute(map, 2, "#FF9900", 5, 0.9, bounds, sw, ne);

    // route 3 (South Africa)
    drawRoute(map, 3, "#FF0000", 5, 0.9, bounds, sw, ne);

    // Flight Ghana - South Africa
    drawFlight(map, "#FF9900", 5, 0.9);

  }

}

// Flight Ghana - South Africa
function drawFlight(map, color, a, b){
  var points = [];
  points.push(new GLatLng(parseFloat("5.605988503"), parseFloat("-0.186123848")));
  points.push(new GLatLng(parseFloat("-29.850389957"), parseFloat("30.9983325")));
  map.addOverlay(new GPolyline(points, color, a, b));
}

function drawRoute(map, route, color, a, b, bounds, sw, ne) {
    var dataFileUrl = "gpsdata.jsp?route=" + route + "&points=300&yMin=" + sw.lat() + "&yMax=" + ne.lat() + "&xMin=" + sw.lng() + "&xMax=" + ne.lng() + "&zoom=" + map.getZoom();

    GDownloadUrl(dataFileUrl, function(data, responseCode) {
      var points = [];
      var marker = [];
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("marker");
      if (markers.length > 0) {
        for (var i = 0; i < markers.length; i++) {
          var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                  parseFloat(markers[i].getAttribute("lng")));
          points.push(point);
        }
        map.addOverlay(new GPolyline(points, color, a, b));
      }

    });
}

function createBlogMarker(point, url, date, text) {
    var marker = new GMarker(point, icon_blog);
    GEvent.addListener(marker, "click", function() {
       autoload = false;
       var msg = "<table border='0' width='200' id='table1' cellspacing='0' cellpadding='2'>";
       msg = msg + "<tr><td colspan='2'><small>Tagebucheintrag vom " + date + "</small></td></tr>";
       msg = msg + "<tr>";
       msg = msg + "<td valign='top' rowspan='2'><iframe src='/opencms/blog/preview.jsp?url=" + url + "' id='markerframe' name='markerframe' width='195' height='200' scrolling='no' frameborder='0'></iframe></td>";
       msg = msg + "<td width='5' valign='top'><img src='/system/modules/ch.digi_tal.web/resources/img/up.gif' border='0' onmouseover='rolle(1,-1)' onmouseout='rolle(-1)' onmousedown='rolle(1,-2)' onmouseup='rolle(1,-1)'/></td>";
       msg = msg + "</tr>";
       msg = msg + "<tr><td width='5' valign='bottom'><img src='/system/modules/ch.digi_tal.web/resources/img/down.gif' border='0' onmouseover='rolle(1,1)' onmouseout='rolle(-1)' onmousedown='rolle(1,2)' onmouseup='rolle(1,1)'/></td></tr>";
       msg = msg + "<tr><td colspan='2'><img src='/system/modules/ch.digi_tal.web/resources/img/right.gif' border='0' />&nbsp;<a href='" + url + "' target='_top'>Eintrag lesen...</a></td></tr>";
       msg = msg + "</table>";
       marker.openInfoWindowHtml(msg);
    });
    GEvent.addListener(marker, "mouseover", function() {
      document.getElementById("message").innerHTML = "&raquo; Tagebucheintrag vom " + date;
    });
    GEvent.addListener(marker, "mouseout", function() {
      document.getElementById("message").innerHTML = "";
    });
    GEvent.addListener(marker, "infowindowclose", function() {
      autoload = true;
    });
    return marker;
}

function createCountryMarker(point, url, title) {
    var marker = new GMarker(point, icon_country);
    GEvent.addListener(marker, "click", function() {
       autoload = false;
       var msg = "<table border='0' width='200' id='table1' cellspacing='0' cellpadding='2'>";
       msg = msg + "<tr><td colspan='2' align='center'>« " + title + " »</td></tr>";
       msg = msg + "<tr>";
       msg = msg + "<td valign='top' rowspan='2'><iframe src='/opencms/country/preview.jsp?url=" + url + "' id='markerframe' name='markerframe' width='195' height='200' scrolling='no' frameborder='0'></iframe></td>";
       msg = msg + "<td width='5' valign='top'><img src='/system/modules/ch.digi_tal.web/resources/img/up.gif' border='0' onmouseover='rolle(1,-1)' onmouseout='rolle(-1)' onmousedown='rolle(1,-2)' onmouseup='rolle(1,-1)'/></td>";
       msg = msg + "</tr>";
       msg = msg + "<tr><td width='5' valign='bottom'><img src='/system/modules/ch.digi_tal.web/resources/img/down.gif' border='0' onmouseover='rolle(1,1)' onmouseout='rolle(-1)' onmousedown='rolle(1,2)' onmouseup='rolle(1,1)'/></td></tr>";
       msg = msg + "<tr><td colspan='2'><a href='" + url + "' target='_top'>&raquo; Mehr erfahren...</a></td></tr>";
       msg = msg + "</table>";
       marker.openInfoWindowHtml(msg);
    });
    GEvent.addListener(marker, "mouseover", function() {
      document.getElementById("message").innerHTML = "&raquo; Land: " + title;
    });
    GEvent.addListener(marker, "mouseout", function() {
      document.getElementById("message").innerHTML = "";
    });
    GEvent.addListener(marker, "infowindowclose", function() {
      autoload = true;
    });
    return marker;
}


// **************************************************************************
// scroll
// **************************************************************************
speed=1;
var dir;
x=false;
function rolle(e,d) {
  if(d) {
    if(e<0) {
      dir=false;
      return;
    }
    dir=new Array(0,0);
    dir[e]=d*speed;
  }
  if(e&&e<0) {
    dir=false;
  }
  if(!dir) {
    return;
  }
  window.markerframe.scrollBy(dir[0],dir[1]);
  setTimeout("rolle()",10);
}


