var mapcenter = [];
var trackpoints = [];
var zoomlevel = 13;

// Baut die Karte auf. Wird erst aufgerufen, wenn die globale Variable "trackpoints" 
// initialisiert ist
function initmap() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("mapcontainer"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.setCenter(new GLatLng(mapcenter[0],mapcenter[1]), zoomlevel);
    var polycoords = [];
    for (var i=0; i<trackpoints.length; i++) {
      polycoords[i] = new GLatLng(trackpoints[i][0], 
				  trackpoints[i][1]);
    }
    var polyline = new GPolyline(polycoords, "#FF0000", 3);
    map.addOverlay(polyline);
  }
}

// Fordert die GPX-Datei an und ässt diese von "parsegpx"
// parsen.
function requestgpx(filename, id, zl) {
  zoomlevel = zl;
  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    xmlreq = new XMLHttpRequest();
  } else if (window.ActiveXObject) { // IE
    xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlreq.open("GET", filename, true);
  xmlreq.onreadystatechange = function () { parsegpx(xmlreq, id); } ;
  xmlreq.send(null);
}

// Parst die XML-Datei und ruft schließlich "initmap" auf, um die Karte aufzubauen
function parsegpx(xmlreq, id) {
  if (xmlreq.readyState == 4) {
    var rawdata = xmlreq.responseXML;
    var trks = rawdata.getElementsByTagName('trk');
    var resarr = [];
    for (var i=0; i<trks.length; i++) {
      if (trks[i].getElementsByTagName('number')[0]) {
	var number = trks[i].getElementsByTagName('number')[0].childNodes[0].data;
	if (number == id) {
	  var points = trks[i].getElementsByTagName('trkpt');
	  for (var j=0; j<points.length; j++) {
	    resarr[j] = [];
	    resarr[j][0] = points[j].getAttribute('lat');
	    resarr[j][1] = points[j].getAttribute('lon');
	  }
	  trackpoints = resarr;
	  mapcenter = getTrackCenter(resarr);
	  // alert(mapcenter);
	  initmap();
	  return resarr;
	}
      }
    }
  }
}

// Ermittelt das Zentrum der Karte
function getTrackCenter(resarr) {
  var latmax = -360;
  var latmin = 360;
  var lonmax = -360;
  var lonmin = 360;
  for (var i=0; i<resarr.length; i++) {
    latmax = Math.max(resarr[i][0], latmax);
    latmin = Math.min(resarr[i][0], latmin);
    lonmax = Math.max(resarr[i][1], lonmax);
    lonmin = Math.min(resarr[i][1], lonmin);
  }
  res = [(latmax + latmin)/2, (lonmax + lonmin)/2 ];
  return res;
}
