function init() {
  if (GBrowserIsCompatible()) {
  
    document.unload = GUnload();
    // arrays to hold copies of the markers used by the side_bar
    // because the function closure trick doesnt work there
    var gmarkers = [];

    // A function to create the marker and set up the event window
    function createMarker(point,name,html,icon) {
      var marker = new GMarker(point, { icon: icon, title: name });
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
      });
      // wofuer speichere ich das doch gleich?
      gmarkers.push(marker);
      return marker;
    }


    // This function picks up the click and opens the corresponding info window
    function myclick(i) {
      GEvent.trigger(gmarkers[i], "click");
    }

    // Funktionswrapper um einzelne GXml-Requests nicht durcheinander zu bringen, weil die Eventhandler-Funktion keinen Parameter hat
    function createRouteRequestHandler(routeRequest) {
      routeRequest.onreadystatechange = function() {
        if (routeRequest.readyState == 4) {
          var xmlDoc = GXml.parse(routeRequest.responseText);
          // Hier koennten wir jetzt auch noch Marker dazubauen
       
          // Wir lesen hier nur die Linien ein
          var lines = xmlDoc.documentElement.getElementsByTagName('line');
          for (var a = 0; a < lines.length; a++) {
            // get any line attributes
            var colour = lines[a].getAttribute("colour");
            var width  = parseFloat(lines[a].getAttribute("width"));

            // read each point on that line
            var points = lines[a].getElementsByTagName("point");
            var pts = [];
            for (var i = 0; i < points.length; i++) {
               pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
                                   parseFloat(points[i].getAttribute("lng")));
            }
            map.addOverlay(new GPolyline(pts,colour,width));
          }
        }
      }
    }

    // create the map
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl3D());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.addControl(new GOverviewMapControl());

//       map.setUIToDefault();

    map.setCenter(new GLatLng( 52.5, -3), 6);
    map.enableScrollWheelZoom();

    // Liste mit XML-Routendateien runterladen und verarbeiten
    GDownloadUrl("/route_xml.pl", function(doc) { 
      var files = eval( doc );
      var routeRequests = new Array();
      
      for (var i=0; i < files.length; i++) {
        routeRequests[i] = GXmlHttp.create();
        routeRequests[i].open("GET", "/xml/" + files[i], true);
        createRouteRequestHandler(routeRequests[i]);

        routeRequests[i].send(null);
      }
    });
    
    // Markerdatei runterladen
    GDownloadUrl("/xml/marker.xml", function(doc) {
      var xmlDoc = GXml.parse(doc);
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var lat = parseFloat(markers[i].getAttribute("lat"));
        var lng = parseFloat(markers[i].getAttribute("lng"));
        var point = new GLatLng(lat,lng);
        var label = markers[i].getAttribute("label");
        var html = markers[i].getAttribute("html");
        var marker = createMarker(point,label,html);
        mm.addMarker(marker, 7, 17);
        mm.refresh();
      }
    });

    // Flickr API
    var mm = new GMarkerManager(map);
    for (var page = 1; page <= 3; page++) {
      var url = "http://www.flickr.com/services/rest/?";
      url = url + "method=flickr.photos.search";
      url = url + "&api_key=3cf53fba23a2267ec38be18a5a97eebf";
      url = url + "&user_id=87157600%40N00";
      url = url + "&tags=geektour"; // geektour
      url = url + "&min_taken_date=2009-06-27+00%3A00%3A00"; // Datum entsprechend anpassen
      url = url + "&max_taken_date=2009-07-12+23%3A59%3A59";
      url = url + "&has_geo=1";
      url = url + "&extras=date_taken%2Cgeo";
      url = url + "&media=photos";
      url = url + "&privacy_filter=1";
      url = url + "&page=" + page;
      url = url + "&per_page=100";
      url = escape(url);
      GDownloadUrl("/proxy.pl?proxy_url=" + url, function(doc) {
        var xmlDoc = GXml.parse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("photo");
         
        for (var i = 0; i < markers.length; i++) {
          // obtain the attributes of each marker
          var lat = parseFloat(markers[i].getAttribute("latitude"));
          var lng = parseFloat(markers[i].getAttribute("longitude"));
          var point = new GLatLng(lat,lng);
          var html = "<div style='min-height: 240px; min-width: 240px;'><h4>" + markers[i].getAttribute("title") + "</h4>";
          var label = markers[i].getAttribute("title");
  
          var img = 'http://farm' + markers[i].getAttribute("farm")
            + '.static.flickr.com/' + markers[i].getAttribute("server") 
            + "/" + markers[i].getAttribute("id")
            + "_" + markers[i].getAttribute("secret") + "_m.jpg";
          html = html + "<a href='http://www.flickr.com/photos/" + markers[i].getAttribute("owner") + "/" 
            + markers[i].getAttribute("id") + "' target='_blank'>";
          html = html + "<img src='" + img + "' border='0' />";
          html = html + "</a>";
          html = html + "</div>";
  
          // Foto-Icon bei groesserem Zoom
          var icon = new GIcon();
          icon.image = 'http://farm' + markers[i].getAttribute("farm")
                    + '.static.flickr.com/' + markers[i].getAttribute("server") 
                    + "/" + markers[i].getAttribute("id")
                    + "_" + markers[i].getAttribute("secret") + "_s.jpg";
          icon.iconSize = new GSize(40, 40);
          icon.iconAnchor = new GPoint(20, 20);
          icon.infoWindowAnchor = new GPoint(30, 10);
          icon.shadowSize = new GSize(0,0);
  //           icon.transparent = "";
           icon.imageMap = [ 0, 0, 0, 40, 40, 40, 40, 0];
          // create the marker
          var marker = createMarker(point,label,html,icon);
          mm.addMarker(marker, 8, 17);
          
          // kleines Icon bei niedrigerer Zoom-Stufe
          var smallIcon = new GIcon();
          smallIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
          smallIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
          smallIcon.iconSize = new GSize(12, 20);
          smallIcon.shadowSize = new GSize(22, 20);
          smallIcon.iconAnchor = new GPoint(6, 20);
          var smallMarker = createMarker(point, 'Foto', false, smallIcon);
          mm.addMarker(smallMarker, 4, 7);
        }
      });
    }
    
    
  } else {
    alert("Sorry, the Google Maps API is not compatible with this browser");
  }
  // This Javascript is based on code provided by the
  // Blackpool Community Church Javascript Team
  // http://www.commchurch.freeserve.co.uk/   
  // http://econym.googlepages.com/index.htm
}

window.onload = init;
