//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++ Google Maps kreativ nutzen ++++++++++++++++++
//++++++++++ powered by Internet Magazin 09.02.2009 ++++++
//++++++++++ Author Dr. Wolfgang Pichler (fne, jeb) ++++++
//++++++++++ http://wolfpil.de/ ++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++


// Global variables: end coordinates (latitude = 48.78985977314325, longitude = 9.159765243530273)
// MAP center (latitude = 48.786169932786066, longitude = 9.16882038116455)
// Coordinates determines by kufnerconsulting

var data = [
 { name: "Hauptbahnhof", date: "Arnulf-Klett-Platz 2, 70173 Stuttgart", lat:"48.784416810109846", lng:"9.18130874633789" },
 { name: "Kriegsbergstasse bis", date: "Hegelplatz", lat:"48.782402", lng:"9.170754" },
 { name: "Herdweg", date: "hoch und gerade aus", lat:"48.784049", lng:"9.169109" },
 { name: "Herdweg", date: "gerade aus", lat:"48.786765", lng:"9.16176" },
 { name: "Herdweg bis", date: "Bahnunterführung rechts Lenzhalde", lat:"48.786384", lng:"9.158584" },
 { name: "Lenzhalde in einer Linkskurve", date: "weiter zum Zielort", lat:"48.787640246517995", lng:"9.16008710861206" },
 { name: "Kufner immobilien Stuttgart", date: "Lenzhalde 20, 70192 Stuttgart-Nord", lat:"48.78985977314325", lng:"9.159765243530273" },
];

var map, route;
var points = [];
var gmarkers = [];
var count =0;
var stopClick = false;


function addIcon(icon) { // Add icon attributes

 icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
 icon.iconSize = new GSize(32, 32);
 icon.shadowSize = new GSize(37, 34);
 icon.iconAnchor = new GPoint(15, 34);
 icon.infoWindowAnchor = new GPoint(19, 2);
 icon.infoShadowAnchor = new GPoint(18, 25);
}


function addClickevent(marker) { // Add a click listener to the markers

 GEvent.addListener(marker, "click", function() {
  marker.openInfoWindowHtml(marker.content);
  /* Change count to continue from the last manually clicked marker
  *  Better syntax since Javascript 1.6 - Unfortunately not implemented in IE.
  *  count = gmarkers.indexOf(marker);
  */
  count = marker.nr;
  stopClick = true;
 });
 return marker;
}


function buildMap() {

 if(GBrowserIsCompatible()) {
  map = new GMap2(document.getElementById("mapdiv"));
  map.setCenter(new GLatLng(48.786169932786066, 9.16882038116455), 14);
  map.addControl(new GSmallMapControl());

  // Add selectable terrain map
  map.addMapType(G_PHYSICAL_MAP);
  // Create a hierarchical map type control
  var hControl = new GHierarchicalMapTypeControl();
  // Display labels only on click
  hControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);
  // Add the control to the map
  map.addControl(hControl);

  // Light blue marker icons
  var icon = new GIcon();
  icon.image = "http://www.google.com/intl/en_de/mapfiles/ms/icons/ltblue-dot.png";
  addIcon(icon);

  // Load the markers from the data array
  for(var i = 0; i < data.length; i++) {
   points[i] = new GLatLng(parseFloat(data[i].lat), parseFloat(data[i].lng));
   gmarkers[i] = new GMarker(points[i], icon);

   // Store data attributes as property of gmarkers
   var html ="<div class='infowindow'>" +
   "<strong>"+ data[i].name + "<\/strong><p>" +
   data[i].date + "<\/p><\/div>";
   gmarkers[i].content = html;
   gmarkers[i].nr = i;
   addClickevent(gmarkers[i]);
   map.addOverlay(gmarkers[i]);
  }
  // Draw polylines between marker points
  var poly= new GPolyline(points, "#003355", 3, .5);
  map.addOverlay(poly);

  // Open infowindow of first marker
  gmarkers[0].openInfoWindowHtml( gmarkers[0].content);

  route= setTimeout("anim()", 3600);
 }
} 


function haltAnim() {

 if(route) {
  clearTimeout(route);
  stopClick = true;
 }
}


function carryOn() {

 if(stopClick == true) anim();
 stopClick = false;
}


function anim() {

 count++;
 if(count < points.length) {
  map.panTo(points[count]);
  gmarkers[count].openInfoWindowHtml(gmarkers[count].content);
  var delay = 2000;
  if((count+1) != points.length)
   var dist = points[count].distanceFrom(points[count+1]);

  // Adjust delay
  if( dist < 10000 ) {
   delay = 4000;
  }
  if( dist > 80000 ) {
   delay = 4200;
  }
  route = setTimeout("anim()", delay);
 }
  else {
  clearTimeout(route);
  count = 0;
  route = null;
 }
}


function playAgain() {

 GUnload();
 if(route) clearTimeout(route);
 stopClick = false;
 count = 0;
 buildMap();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++

