var map;
var infoWindow;
var tripCoordinates = [];

function initialize_map(categoryId) {
   downloadUrl('/positions/totaldistance.php?categoryId='+categoryId, function(data) {
	document.getElementById("total_distance_nm").innerHTML='geseglte Seemeilen: '+data;
   });

   var latlng = new google.maps.LatLng(52.5000, 5.5000);
   var myOptions = ({
      zoom: 7,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }
   });
   map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

   infoWindow = new google.maps.InfoWindow();

   var coordinatesUrl = '/positions/coordinates_response.php?categoryId='+categoryId;
   downloadUrl(coordinatesUrl, function(data) {
       var xml = parseXml(data);
       var markerNodes = xml.documentElement.getElementsByTagName("position");
       var bounds = new google.maps.LatLngBounds();
       for (var i = 0; i < markerNodes.length; i++) {
         var uniqueId = markerNodes[i].getAttribute("uniqueId");
         var ident = markerNodes[i].getAttribute("ident");
         var dateAndTime = markerNodes[i].getAttribute("dateAndTime");
         var latitude = parseFloat(markerNodes[i].getAttribute("latitude"));
         var longitude = parseFloat(markerNodes[i].getAttribute("longitude"));
         
         var latlng = new google.maps.LatLng( latitude, longitude );
         tripCoordinates.push(latlng);
         
         bounds.extend(latlng);
       }
       
       map.fitBounds(bounds);
	var listener = google.maps.event.addListener(map, "idle", function() { 
	  if (map.getZoom() > 8) map.setZoom(8); 
	  google.maps.event.removeListener(listener); 
	});
       var tripPath = new google.maps.Polyline({
         path: tripCoordinates,
         strokeColor: "#FF0000",
         strokeOpacity: 1.0,
         strokeWeight: 2
       });
       tripPath.setMap(map);
     });


   var markerUrl = '/positions/marker_response.php?categoryId='+categoryId;
   downloadUrl(markerUrl, function(data) {
       var xml = parseXml(data);
       var markerNodes = xml.documentElement.getElementsByTagName("position");
       for (var i = 0; i < markerNodes.length; i++) {
         var uniqueId = markerNodes[i].getAttribute("uniqueId");
         var ident = markerNodes[i].getAttribute("ident");
         var dateAndTime = markerNodes[i].getAttribute("dateAndTime");
         var latitude = parseFloat(markerNodes[i].getAttribute("latitude"));
         var longitude = parseFloat(markerNodes[i].getAttribute("longitude"));
         var speed = markerNodes[i].getAttribute("speed");
         var course = markerNodes[i].getAttribute("course");
         var marine = markerNodes[i].getAttribute("marine");
         var windSpeed = markerNodes[i].getAttribute("windSpeed");
         var windDirection = markerNodes[i].getAttribute("windDirection");
         var tripName = markerNodes[i].getAttribute("tripName");
         var departure = markerNodes[i].getAttribute("departure");
         var arrival = markerNodes[i].getAttribute("arrival");
         var articleUrl = markerNodes[i].getAttribute("articleUrl");
         
         var latlng = new google.maps.LatLng( latitude, longitude );
         
         createMarker(latlng, uniqueId, ident, dateAndTime, latitude, longitude, speed, course, marine, windSpeed, windDirection, tripName, departure, arrival, articleUrl);
       }
     });
}

function downloadUrl(url,callback) {
 var request = window.ActiveXObject ?
     new ActiveXObject('Microsoft.XMLHTTP') :
     new XMLHttpRequest;

 request.onreadystatechange = function() {
   if (request.readyState == 4) {
     request.onreadystatechange = doNothing;
     callback(request.responseText, request.status);
   }
 };

 request.open('GET', url, true);
 request.send(null);
}

function createMarker(latlng, uniqueId, ident, dateAndTime, latitude, longitude, speed, course, marine, windSpeed, windDirection, tripName, departure, arrival, articleUrl) {
  latitudeText='N';
  longitudeText='E';
  if(latitude<0){
	latitude=-latitude;
	latitudeText='S';
  }
  if(longitude<0){
	longitude=-longitude;
	longitudeText='W';
  }
  var html = "<b><a href=\"index.php?post/" + articleUrl + "\">" + tripName + "</a></b><br/>" + dateAndTime + " UTC<br/>Latitude: " + latitude + latitudeText + "<br/>Longitude: " + longitude + longitudeText + "<br/>Geschwindigkeit: " + speed + "kn<br/>Kurs: " + course + "°<br/>Windgeschwindigkeit: " + windSpeed + "kn<br/>Windrichtung: " + windDirection + "°<br/>Start: " + departure + "<br/>Ziel: " + arrival;
  var marker = new google.maps.Marker({
    map: map,
    position: latlng,
    icon: '/public/sailboat_icon.png'
  });
  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker);
  });
}


function parseXml(str) {
   if (window.ActiveXObject) {
      var doc = new ActiveXObject('Microsoft.XMLDOM');
      doc.loadXML(str);
      return doc;
   } else if (window.DOMParser) {
      return (new DOMParser).parseFromString(str, 'text/xml');
   }
}

function doNothing() {}


