var map; //complex object of type OpenLayers.Map
var scalebar;

MTBMAP_MISSING_TILE_URL = "/404.png";

/**
 * Property: originalOnImageLoadError
 * {Function} Original onImageLoadError function.
 */
//OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;

/**
 * Function: onImageLoadError
 */
OpenLayers.Util.onImageLoadError = function() {
    this.src = MTBMAP_MISSING_TILE_URL;
}; 

function mapEvent(event) {
    var lonLat = map.getCenter();
    var zoom2 = map.getZoom();
    dojo.cookie("mtbmapLon", dojo.toJson(lonLat.lon), {expires: 365})
    dojo.cookie("mtbmapLat", dojo.toJson(lonLat.lat), {expires: 365})
    dojo.cookie("mtbmapZoom", dojo.toJson(zoom2), {expires: 365})
}


//Initialise the 'map' object
function init() {
    
    map = new OpenLayers.Map ("map", {
	controls:[
	    new OpenLayers.Control.Navigation(),
	    new OpenLayers.Control.PanZoomBar(),
	    new OpenLayers.Control.Permalink(),
	    new OpenLayers.Control.Attribution()],
	maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
	maxResolution: 156543.0399,
	numZoomLevels: 18,
	units: 'm',
	projection: new OpenLayers.Projection("EPSG:900913"),
	displayProjection: new OpenLayers.Projection("EPSG:4326"),
	eventListeners: {
            "moveend": mapEvent,
            "zoomend": mapEvent
	}});

    map.addControl(new OpenLayers.Control.MousePosition());

    scalebar = new OpenLayers.Control.ScaleLine()
    map.addControl(scalebar);

    // Define the map layer
    // Note that we use a predefined layer that will be
    // kept up to date with URL changes
    // Here we define just one layer, but providing a choice
    // of several layers is also quite simple
    // Other defined layers are OpenLayers.Layer.OSM.Mapnik, OpenLayers.Layer.OSM.Maplint and OpenLayers.Layer.OSM.CycleMap
    //layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
    //map.addLayer(layerTilesAtHome);
    
    var newLayer = new OpenLayers.Layer.OSM("MTB", "tiles/${z}/${x}/${y}.png", {numZoomLevels: 19, buffer: 1});
    map.addLayer(newLayer);


    if( ! map.getCenter() ){
	//	var lonLat1 = dojo.fromJson(dojo.cookie("mtbmapLonLat"));
	var lat = dojo.cookie("mtbmapLat");
	var lon = dojo.cookie("mtbmapLon");
	var zoom = dojo.cookie("mtbmapZoom");
	if(lat != null && lon != null && zoom != null)
	{
	    var lat1 = dojo.fromJson(lat);
	    var lon1 = dojo.fromJson(lon);
	    var zoom1 = dojo.fromJson(zoom);
	    var lonLat = new OpenLayers.LonLat(lon1, lat1);
	    map.setCenter (lonLat, zoom1);
	}
	else
	{
	    var lat=59.650
	    var lon=9.644
	    var zoom=13
	    var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
	    map.setCenter (lonLat, zoom);
	}
    }
}


dojo.addOnLoad(init);	

