function load() {
    var mapObj = document.getElementById("map");
    
    if (GBrowserIsCompatible() && mapObj) {
      // hackerei location: http://maps.google.de/maps?f=q&hl=de&geocode=&q=alte+hackerei,+karlsruhe&ie=UTF8&ll=49.005735,8.42948&spn=0.009755,0.020664&z=16&iwloc=A&om=0
      var map = new GMap2(mapObj);
      var center = new GLatLng(49.005735, 8.42948);
      map.setCenter(center, 15);
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
      
      // custom hackerei icon
      var baseIcon = new GIcon();
      baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
      baseIcon.iconSize = new GSize(20, 34);
      baseIcon.shadowSize = new GSize(37, 34);
      baseIcon.iconAnchor = new GPoint(9, 34);
      baseIcon.infoWindowAnchor = new GPoint(9, 2);
      baseIcon.infoShadowAnchor = new GPoint(18, 25);
      
      var hackereiIcon = new GIcon(baseIcon);
      hackereiIcon.image = "themes/hackerei/images/gmap-marker.png";
      
      markerOptions = { icon:hackereiIcon };
      var marker = new GMarker(center, markerOptions);

      map.addOverlay(marker);
      
      // copyright text sometimes flows over map.
      // as of google-groups this is legal
      mapObj.style.overflow = "hidden";
    }
}

// let's be memory friendly
function addLoadEvent(func) {
  var oldonload = window.onload;
  
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) oldonload();
      func();
    }
  }
}

function addUnLoadEvent(func) {
  var oldonunload = window.onunload;
  
  if (typeof window.onunload != 'function') {
    window.onunload = func;
  } else {
    window.onunload = function() {
      if (oldonunload) oldonunload();
      func();
    }
  }
}

addLoadEvent(load);
addUnLoadEvent(GUnload);