	var map=null;
	var bng = new OpenLayers.Projection('EPSG:27700');
	//var latlon = new OpenLayers.Projection('EPSG:4326');
	function init(){
	    
	    // Create extents
	    var extent = new OpenLayers.Bounds(517220.0,172860.0,546780.0,193860.0);
	    
	    var mapControls = [
	            new OpenLayers.Control.Navigation(),
	            new OpenLayers.Control.PanZoomBar2(),
				new OpenLayers.Control.PieLayerSwitcher({
					div: document.getElementById('layerswitcher'),
					legend: true,
					legendDiv: document.getElementById('legend'),
					legendDimension: {height:15,width:15},
					categories: _layer_cats	}),
	            new OpenLayers.Control.ScaleLine({maxWidth:250}),
	            new OpenLayers.Control.KeyboardDefaults(),
				new OpenLayers.Control.Attribution()];
	            
	            
	    map = new OpenLayers.Map('map', {
	        controls: mapControls,
	        maxExtent: extent,
	        projection: bng
	    });
	    
	    
	    var mapFile = "/ms/mapfiles/wms-7-collinstwozerozerosix.map";
		var wmsURL = getWMSURL() + "?map=" + mapFile;
		// Basemap WMS layer
	    var layerNames = 'basemap';
	
	    var wmsLayer = new OpenLayers.Layer.WMS('Collins 2006', wmsURL,
	        {layers: layerNames, format: 'png'},
	        {
	            scales: [7550,3770,3690,1880], 
	            buffer: 0, 
	            projection:'EPSG:27700', 
	            units:'m',
	            attribution: 'Content &copy;thePIEguide 2010 and map data &copy;Collins Bartholomew 2006'
	        }
	        
	    );
		map.addLayers([wmsLayer]);
		map.zoomToMaxExtent();
		
		// ---- Layers
		var layers = [];
	
		for (var i = 0, l = _layer_feats.length; i < l; i++) {
			var layer_def = _layer_feats[i];
			layer_def['ms_url'] = getWFSURL() + "?map=" + layer_def['ms_url'];
			var layer = new OpenLayers.Layer.WFS(layer_def['name'], layer_def['ms_url'], layer_def['options'], layer_def['options2'], layer_def['featuretypes'], layer_def['typeId']);
			layers.push(layer);
		}
	
		map.addLayers(layers);	
		
		var siteLocator = new OpenLayers.Control.SiteLocator({
			div: document.getElementById('sitelocator'),
			partner_id: 18,
			linkWalkingRoutes: true,
			showLocationInfo: true,
			locationInfoDiv: document.getElementById('sitelocationinfo')
		});
		map.addControl(siteLocator);
		var walkingRoutes = new OpenLayers.Control.WalkingRoutes({div:document.getElementById('walkingroutes'), activeLayer:'Entrance', routes:[]});
		map.addControl(walkingRoutes);
		
		// make layers selectable
		var select = new OpenLayers.Control.SelectTemplateFeature({'layers':layers});
		map.addControl(select);
		select.activate();
		
	}
	
	function log(obj) {
		if (typeof console != 'undefined')
			console.log(obj);
	}	

function pdfClick() {
    var post = {};

    // get bbox
    //var size = mainMap.getSize();
    var width = map.div.offsetWidth;
    var height = map.div.offsetHeight;

    post.width = width;
    post.height = height;

    var c1 = map.getLonLatFromViewPortPx(new OpenLayers.Pixel(0,0));
    var c2 = map.getLonLatFromViewPortPx(new OpenLayers.Pixel(width, height));

    post.bbox = [];
    post.bbox[0] = c1.lon;
    post.bbox[1] = c2.lat;
    post.bbox[2] = c2.lon;
    post.bbox[3] = c1.lat;

    
    // get visible point features
    post.features = [];
    post.layers = [];
    var featurecount = 0;

    var layers = map.getLayersBy("visibility", true);
    var extent = map.getExtent();  

    for(var i=0, len=layers.length; i<len; i++) {
        if (layers[i].inRange) {
			if (typeof(layers[i].typename) != 'undefined') {
				//post.layers.push(layers[i].typename);
				var layer = layers[i];
				var curr_layer = {};
				curr_layer.typename = layer.typename;
				curr_layer.icon = layer.getTypeIcon(layer.typename);
				curr_layer.title = layer.getTypeTitle(layer.typename);
				if (typeof(layer.features) != 'undefined') {
					var features = [];
					for (var feat_ind=0,feat_len = layer.features.length;feat_ind<feat_len;feat_ind++) {
						var feature = layer.features[feat_ind];
						
						// only add if visible
						if (feature.onScreen()) {
							var feat = {};
							var pixel = map.getViewPortPxFromLonLat(
                                    new OpenLayers.LonLat(
                                        feature.geometry.x,feature.geometry.y
                                    )
                                );
							feat.x = parseInt(pixel.x);
							feat.y = parseInt(pixel.y);
							features.push(feat);
						}
					}
					curr_layer.features = features;
				}
				post.layers.push(curr_layer);
			}
            
        }
    }
	   
	var jsontext = JSON.stringify(post);

    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "pdf_create.php");

    var hiddenField = document.createElement("input");              
    hiddenField.setAttribute("name", "json");
    hiddenField.setAttribute("value", jsontext);
    form.appendChild(hiddenField);
    
    form.setAttribute("target", "_blank");
    var pdfform = document.getElementById("invisibleform");
    pdfform.innerHTML = "";
    pdfform.appendChild(form);
    form.submit();


    //window.open("scripts/makepdf.php?bbox="+bbox+"&size="+width+","+height+"&layers="+pdflayers+"&alphamarkers="+alphamarkers);
    //log("json: "+jsontext);
}





/**
 * @returns URL in address bar without page or file name with trailing '/'
 */
function getBaseURL() {
	var url = document.URL;
	// Remove page name if exists in url
	url = url.substring(0, (url.lastIndexOf("/") + 1));
	// check trailing '/'
	url = (url.charAt(url.length - 1) == '/') ? url : url + '/';
	return url;
}
