var map;
var lon = "";
var lat = "";
var zoom = "";
var subpage = location.hostname.split('.')[0];
OpenLayers.Util.onImageLoadErrorColor = "transparent";

//Proj4js.defs["EPSG:28992"] = "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000  +ellps=bessel +towgs84=565.040,49.910,465.840,-0.40939,0.35971,-1.86849,4.0772";
Proj4js.defs["EPSG:28992"] = "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.2369,50.0087,465.658,-0.406857330322398,0.350732676542563,-1.8703473836068,4.0812 +no_defs <>";
Proj4js.defs["EPSG:900913"] = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";

function myFormat(lonLat) {
  var digits = parseInt(this.numdigits);
  var newHtml =
    "Lon: " +
    lonLat.lon.toFixed(digits) +
    " Lat: " +
    lonLat.lat.toFixed(digits) +
    " Zoom: " +
    this.map.getZoom();
  return newHtml;
}

function mapInit(lon, lat, zoom){
  map = new OpenLayers.Map('map',
    { 
      maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508),
      numZoomLevels: 20,
      maxResolution: 156543,
      units: 'm',
      controls: [
        new OpenLayers.Control.MouseDefaults(),
        new OpenLayers.Control.KeyboardDefaults(),
        new OpenLayers.Control.MousePosition({formatOutput: myFormat, numdigits:4, div: $('posLatLon')}),
        new OpenLayers.Control.MousePosition(
        {
          prefix: "RD Coordinates (", 
          separator: ",", 
          suffix: ")", 
          displayProjection: new OpenLayers.Projection("EPSG:28992"), 
          numdigits: 0, 
          displayClass: "olTilePosition",
          div: $('posRD')
        }),
        new OpenLayers.Control.PanZoomBar(),
        new OpenLayers.Control.Permalink("Permalink", "", {div:$('permalink'), displayClass: 'permalink'}),
        new OpenLayers.Control.LayerSwitcher()
      ],
      displayProjection: new OpenLayers.Projection("EPSG:4326"),
      projection: new OpenLayers.Projection("EPSG:900913") 
    }
  );

  /* Add edit permalink */
  var editlink = new OpenLayers.Control.Permalink("edit", "http://www.openstreetmap.org/edit", {div:$('editlink'), displayClass: 'editlink'});
  map.addControl(editlink);
  editlink.element.textContent = 'Edit map';

  var layerFastNL = new OpenLayers.Layer.TMS(
    "SpeedLayer",
    [
      "http://tile.openstreetmap.nl/osm/"
    ],
    {
      type:'png', 
      getURL: get_osm_url,
      border:1,
      transitionEffect: 'resize'
    } 
  );

  var layerLiveNL = new OpenLayers.Layer.TMS(
    "LiveLayer",
    [
      "http://live.openstreetmap.nl/osm/"
    ],
    {
      type:'png', 
      getURL: get_osm_url,
      border:1,
      transitionEffect: 'resize'
    } 
  );

  var layerMaxSpeed = new OpenLayers.Layer.TMS (
    "Max Speed", 
    "http://overlay.openstreet.nl/maxspeed/",
    {
      type:'png', 
      getURL: get_osm_url, 
      border:1, 
      isBaseLayer:false, 
      visibility:false
    }
  );

  var layerLit = new OpenLayers.Layer.TMS (
    "Lit", 
    "http://overlay.openstreet.nl/lit/",
    {
      type:'png', 
      getURL: get_osm_url, 
      border:1, 
      isBaseLayer:false, 
      visibility:false
    }
  );
  layerLit.setOpacity(0.8);

  var layerNLfy = new OpenLayers.Layer.TMS (
    "NL (Fries/Frysk)", 
    "http://93.186.180.157/frysk/",
    {
      type:'png', 
      getURL: get_osm_url, 
      border:1
    }
  );
  
  var layerZone = new OpenLayers.Layer.TMS (
    "OV Zones (test)",
    [
      "http://tiles.mijndev.openstreetmap.nl:8080/ov-zones/"
    ],
    {
      type:'png', 
      getURL: get_osm_url, 
      border:1, 
      isBaseLayer: false, 
      visibility: false
    }
  );
  
  var layerNLorig = new OpenLayers.Layer.TMS (
    "NL (pre-AND)",
    "http://dev.openstreetmap.nl/tilecache.py/1.0.0/nld-orig/",
    {
      type:'png', 
      getURL: get_osm_url, 
      border: 1,
      maxExtent: new OpenLayers.Bounds(311549.5,6555477.5,822458.8125,7118943.5)}
  );
  
  var layerANDorig = new OpenLayers.Layer.TMS (
    "NL (original AND)",
    "http://dev.openstreetmap.nl/tilecache.py/1.0.0/and-orig/",
    {
      type:'png', 
      getURL: get_osm_url,
      border: 1,
      maxExtent: new OpenLayers.Bounds(311549.5,6555477.5,822458.8125,7118943.5)
    }
  );
  
  var layerMapnik = new OpenLayers.Layer.TMS (
    "Mapnik (internationaal)",
    "http://tile.openstreetmap.org/mapnik/",
    {
      type:'png', 
      getURL: get_osm_url, 
      border: 1
    }
  );
  
  var layerTah = new OpenLayers.Layer.TMS(
    "Tiles@Home",
    [
      "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, 
      border: 1
    }
  );
  
  var reclame_laag = new OpenLayers.Layer.OSM("Reclame", "http://tiles.mijndev.openstreetmap.nl:8080/centerparcs/${z}/${x}/${y}.png", {numZoomLevels: 19, isBaseLayer:false, visibility:false});

  map.addLayers(
    [
      layerFastNL, 
      layerLiveNL,
      layerNLfy, 
      layerNLorig, 
      layerANDorig, 
      layerMapnik, 
      layerTah, 
      layerZone, 
      layerMaxSpeed,
      layerLit,
      reclame_laag
     ]
  );
  
  if(!map.getCenter()) {
    zoom = parseInt(zoom, 10);
    var pos = new OpenLayers.LonLat(lon , lat);
    map.setCenter(pos.transform(map.displayProjection,map.projection), zoom);
  }

  map.events.register('moveend', this, mapMoved);
}

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 path = z + "/" + x + "/" + y + "." + this.type;
  var url = this.url;
  if (url instanceof Array) {
    url = this.selectUrl(path, url);
  }
  return url + path;
}
