var map; //complex object of type OpenLayers.Map
var pois = new OpenLayers.Layer.Markers("POIs");
var boxes = new OpenLayers.Layer.Vector("Boxes");

// Default map position if not overridden by URL parameters
var lon = -2
var lat = 54
var zoom = 6
var defaultCentreLonLat;

var isIE6 = /msie|MSIE 6/.test(navigator.userAgent); //Urgh.

var EPSG4326 = new OpenLayers.Projection("EPSG:4326");
var EPSG900913 = new OpenLayers.Projection("EPSG:900913");
var bounds = new OpenLayers.Bounds(-30, 40, 15, 70);

var baseLayers = [];
var baseLayerStrs = [];


//Functions from hereon.

function getTMSTileURL(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  "blank.png"
	}
 	else
	{
	    x = ((x % limit) + limit) % limit;

            var url = this.url;
	    var mod_y = (limit - 1) - y;
            var path = z + "/" + x + "/" + mod_y + ".png";

            if (url instanceof Array)
            {
                url = this.selectUrl(path, url);
            }

            return url + path;
        }
};

OpenLayers.Util.onImageLoadError = function() 
{
        this.src = "blank.png";
};

//Initialise the 'map' object
function init() 
{
	map = new OpenLayers.Map ("map", 
	{
    	    controls:[
                new OpenLayers.Control.Navigation(),
                new OpenLayers.Control.PanZoomBar(),
                new OpenLayers.Control.Attribution(),
		new OpenLayers.Control.ScaleLine(),
		new OpenLayers.Control.MousePosition(),
		new OpenLayers.Control.MouseDefaults()],
	    maxExtent: bounds.clone().transform(EPSG4326, EPSG900913), 
    	    numZoomLevels: 14,
            maxResolution: "auto",
            units: 'm',
            projection: EPSG900913,
            displayProjection: EPSG4326
    	} );

	layerNetwork = new OpenLayers.Layer.OSM("Network Overlay", "http://scenic.oobrien.com/tiles/dark21/${z}/${x}/${y}.png", {numZoomLevels: 14, transitionEffect: "resize", isBaseLayer: false, attribution: "Data CC-By-SA by OpenStreetMap"});
        layerScenic = new OpenLayers.Layer.OSM("Scenic (Surface)", "http://scenic.oobrien.com/tiles/scenicBNG/", {numZoomLevels: 14, transitionEffect: "resize", attribution: "MySociety (NC-BY)", getURL: getTMSTileURL})
 	
	map.addLayer(layerScenic);
 	map.addLayer(layerNetwork);

	if (isIE6)
	{
		alert("This website really doesn't work too well at all in Internet Explorer 6.");
		layerNetwork.setOpacity(0.5);
		layerNetwork.setVisibility(false);
		layerNetwork.setOpacity(0.5);
		layerNetwork.setVisibility(true);
	}
	else
	{
		map.addLayer(boxes); 
		map.addLayer(pois); //Must go last, so it is the top vector layer and receives clicks. 
	}

        defaultCentreLonLat = new OpenLayers.LonLat(lon, lat).transform(EPSG4326, EPSG900913);    
	map.setCenter(defaultCentreLonLat, zoom);
	
	//Set defaults on the form, clear out any existing values if on a reload.
	document.getElementById("poiClearB").disabled = true; 		
	document.getElementById("poiRefreshB").disabled = false;

	//Set up custom events.
	map.events.register("move", null, clearPOIMessage);
}

            
