var map;
var markers;
var epsg4326 = new OpenLayers.Projection("EPSG:4326");
var popup;




function get_osm_url (bounds) {
	var res = this.map.getResolution();
	var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
	var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
	var z = this.map.getZoom();
	var limit = Math.pow(2, z);

	if (y < 0 || y >= limit)
	{
		return null;
	}
	else
	{
		x = ((x % limit) + limit) % limit;

		var path = z + "/" + x + "/" + y + "." + this.type; 
		var url = this.url;
		
		if (url instanceof Array) {
			url = this.selectUrl(path, url);
		}
		return url + path;
	}
}



function init() {
	OpenLayers.Util.onImageLoadError = function() {
		this.src='http://www.informationfreeway.org/images/emptysea.png'
	}
	
	map = new OpenLayers.Map ("map", {
			controls:[
				new OpenLayers.Control.MouseDefaults(),
				new OpenLayers.Control.PanZoom()],
				maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
				numZoomLevels:18, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );

	layerTilesAtHome = new OpenLayers.Layer.TMS( 
				"tiles@home (direct)", 
				["http://a.tah.openstreetmap.org/Tiles/tile/", "http://b.tah.openstreetmap.org/Tiles/tile/", "http://c.tah.openstreetmap.org/Tiles/tile/"],
				{type:'png', getURL: get_osm_url, displayOutsideMaxExtent: true }, {'buffer':1} );

	layerMapnik = new OpenLayers.Layer.TMS( 
				"Mapnik (updated weekly)",
				["http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/"],
				{type:'png', getURL: get_osm_url, displayOutsideMaxExtent: true }, {'buffer':1} );

	map.addLayers([layerMapnik,layerTilesAtHome]);
	//map.addControl(new OpenLayers.Control.KeyboardDefaults());
	//map.addControl(new OpenLayers.Control.LayerSwitcher());
	map.setCenter (new OpenLayers.LonLat(lon, lat), zoom);

	addBfsMarkers();


	var mapdom = document.getElementById('map');
    
}



function addBfsMarkers() {
	markers = new OpenLayers.Layer.Markers("BfS Standorte");
	map.addLayer(markers);

	var size = new OpenLayers.Size(89,35);
	var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));
	var icon = new OpenLayers.Icon('/maps/openlayers/bfs_logo.png',size,offset);



    /// Salzgitter, Willy-Brand-StraÃŸe
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Willy-Brandt-Stra&szlig;e 5<br/>D-38226 Salzgitter<br/><br/>Telefon: +49 (0) 3018 / 333-0<br/>Telefax: +49 (0) 3018 / 1885';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(10.331159543062089),calcLat(52.15153291207722)),icon.clone(), desc);

	/// Salzgitter, INFO Konrad
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>INFO Konrad<br/>Chemnitzer Stra&szlig;e 27<br/>D-38226 Salzgitter<br/><br/>Telefon: +49 (0) 3018 / 333-0<br/>Telefax: +49 (0) 3018 / 1885';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(10.32986135418006),calcLat(52.15490654441908)),icon.clone(), desc);

	/// WolfenbÃ¼ttel, INFO Asse
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>INFO Asse<br/>Am Walde 1<br/>D-38319 Remlingen<br/><br/>Telefon: +49 (0) 5336 / 89-640<br/>Telefax: +49 (0) 5336 / 89-494';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(10.669697162760606),calcLat(52.12882912550534)),icon.clone(), desc);

	/// Freiburg, RosastraÃŸe
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Rosastra&szlig;e 9<br/>D-79098 Freiburg<br/><br/>Telefon: +49 (0) 3018 / 333-6789<br/>Telefax: +49 (0) 3018 / 333-6751';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(7.84669424370334),calcLat(47.9984098399918)),icon.clone(), desc);

	/// Messstation Schauinsland
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Messstation Schauinsland<br/>Schauinslandweg 2<br/>D-79254 Oberried/Hofsgrund';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(7.90745162914901),calcLat(47.914686238679636)),icon.clone(), desc);

	/// OberschleiÃŸheim (Neuherberg)
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Ingolst&auml;ter Landstra&szlig;e 1<br/>D-85764 Neuherberg<br/><br/>Telefon: +49 (0) 3018 / 333-0<br/>Telefax: +49 (0) 3018 / 2885';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(11.58951226542946),calcLat(48.2210573877686)),icon.clone(), desc);

	/// Bonn
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Robert-Schumann-Platz 3<br/>D-53175 Bonn<br/><br/>Telefon: +49 (0) 3018 / 305-3761<br/>Telefax: +49 (0) 3018 / 305-3765';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(7.139213489499129),calcLat(50.7053570757549)),icon.clone(), desc);

	/// Berlin
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>K&ouml;penicker Allee 120 - 130<br/>D-10318 Berlin<br/><br/>Telefon: +49 (0) 3018 / 333-0<br/>Telefax: +49 (0) 3018 / 4885';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(13.537428589662305),calcLat(52.483564848153236)),icon.clone(), desc);

	/// Morsleben
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>INFO Morsleben<br/>Amalienweg 1<br/>D-39343 Ingersleben OT Morsleben<br/><br/>Telefon: +49 (0) 39050 / 82 74<br/>Telefax: +49 (0) 39050 / 84 93';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(11.106049559628149),calcLat(52.220909123463905)),icon.clone(), desc);

	/// Gorleben
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>INFO Gorleben<br/>Rottlebener Weg 1<br/>D-29475 Gorleben<br/><br/>Telefon: +49 (0) 5882 / 987390<br/>Telefax: +49 (0) 5882 / 987392';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(11.345120161762333),calcLat(53.028458744514744)),icon.clone(), desc);

	/// Rendsburg
	var desc = 'Bundesamt f&uuml;r Strahlenschutz<br/>Graf-von-Staufenberg-Stra&szlig;e 13<br/>D-24768 Rendsburg<br/><br/>Telefon: +49 (0) 4331 / 13 22 - 0';
	addMarkerToMap(new OpenLayers.LonLat(calcLon(9.669222688066228),calcLat(54.29596945414618)),icon.clone(), desc);
}




function calcLat(oldlat) {
	var newlat = Math.log (Math.tan ((90 + oldlat) * PI / 360)) / (PI / 180);
	newlat = newlat * 20037508.34 / 180;

	return newlat;
}

function calcLon(oldlon) {
	var newlon = oldlon * 20037508.34 / 180;

	return newlon;
}



function addMarkerToMap(position, icon, description) {
   var marker = new OpenLayers.Marker(position.clone().transform(epsg4326, map.getProjectionObject()), icon);

   markers.addMarker(marker);

   if (description) {
      marker.events.register("click", marker, function() { openMapPopup(marker, description) });
   }

   return marker;
}

function openMapPopup(marker, description) {
   closeMapPopup();

   popup = new OpenLayers.Popup.FramedCloud("popup", marker.lonlat, null,
                                               description, marker.icon, true);
   popup.setBackgroundColor("#ffffff");
   popup.autoSize = true;
   map.addPopup(popup);

   return popup;
}

function closeMapPopup() {
   if (popup) {
      map.removePopup(popup);
      delete popup;
   }
}








if (lon=="") lon=1.0996
if (lat=="") lat=35.5862
if (zoom=="") zoom=2
lat=parseFloat(lat)
lon=parseFloat(lon)
zoom=parseInt(zoom)
var PI = 3.14159265358979323846;

lon = lon * 20037508.34 / 180;
lat = Math.log (Math.tan ((90 + lat) * PI / 360)) / (PI / 180);
lat = lat * 20037508.34 / 180;












