var mainMap;

function init() {
    
    OpenLayers.CommonPath = "http://mc.dev.thepieguide.com/common/";
	OpenLayers.ImgPath = OpenLayers.CommonPath + "images/";

	var extent = new OpenLayers.Bounds(514479, 169544, 532386, 189464);
	// ------- Create Map -------
	mainMap = new OpenLayers.Map('map', { 
		//maxExtent: new OpenLayers.Bounds(514479, 169544, 529386, 189464),
		maxExtent: extent,
        //restrictedExtent: new OpenLayers.Bounds(514479, 169544, 529386, 189464),
		restrictedExtent: extent, 
		units: 'm', 
		projection: "EPSG:27700", 
		tileSize: new OpenLayers.Size(468,468),
		/*
		resolutions: [
            1.333333333,
            2.666666666,
            7.07792595	
        ],*/
		scales : [35430,18420,14170,7790,4950,2830],
		numZoomLevels: 6,
		controls: [],
		theme: null,
        localPath: "local/",
        mapServerUrl: "/wfs/?map=/home/mike/data/lords2/lords.map"
	});

	// ------- Base Layer -------
	var baseLayer = new OpenLayers.Layer.WMS( "Base", 
		"http://wms.thepieguide.com/?map=/home/mike/data/lords2/lords-wms.map", {
		layers: 'basemap',
		format: 'png'
	}, {
		buffer: 1,
		attributionByZoom: [
            'Mapdata &copy; 2009 Navteq',
            'Mapdata &copy; 2009 Navteq',
			'Mapdata &copy; 2009 Navteq',
			'Mapdata &copy; 2009 Navteq',
            'Mapdata &copy; 2009 Navteq'
        ]
	} );


	// ------- Add Layers to Map -------
	mainMap.addLayer(baseLayer);
	PieGuide.Util.LoadLayers(mainMap, layers);


	// ------- Controls -------
    var legendBar = new PieGuide.Control.LegendBar({
        div: OpenLayers.Util.getElement("layerswitcherimg")
    });

	var legendControl = new PieGuide.Control.Legend({
		div: OpenLayers.Util.getElement("legend"),
		title: 'Key',
        contentClass: 'body',
        selectAllControl: false,
        displayStatus: false,
        displayStatic: true,
        iconWidth: null,
        iconHeight: null,
        hideEmpty: true,
        hideInvisible: true
	});

    var walkingRoutes = new PieGuide.Control.WalkingRoutes({
		div: OpenLayers.Util.getElement("walkingroutes"),
		title: 'Walking Routes',
        contentClass: 'body',
        legendBar: legendBar,
        activeSection: 'Foot',
        location_id: 4368656,
        query: new PieGuide.Query.WFS({
            title: 'Walking Route Search',
            srsName: "epsg:27700",
            protocolUrl: mainMap.mapServerUrl,
            featureType: "walkingroutesearch",
			arguments: [
                { attributeName: "destination_id" } 
            ],
            requireValidation: false
        })
    });


    var busRoutes = new PieGuide.Control.BusRoutes({
		div: OpenLayers.Util.getElement("busroutes"),
		title: 'Bus Routes',
        contentClass: 'body',
        legendBar: legendBar,
        activeSection: 'Bus',
        query: new PieGuide.Query.WFS({
            title: 'Bus Route Search',
            srsName: "epsg:27700",
            protocolUrl: mainMap.mapServerUrl,
            featureType: "busroutesearch",
            requireValidation: false
        })
    });

	// ------- Controls -------
    mainMap.addControl(new OpenLayers.Control.ArgParser()); 
	mainMap.addControl(new OpenLayers.Control.PanZoomBar());
	mainMap.addControl(new OpenLayers.Control.Navigation());
    mainMap.addControl(new PieGuide.Control.Attribution());
    mainMap.addControl(legendBar);
    mainMap.addControl(legendControl);
    mainMap.addControl(walkingRoutes);
    mainMap.addControl(busRoutes);

    var selectlayers = [];
    for(var i=0, len=mainMap.layers.length; i<len; i++) 
        if (mainMap.layers[i].inlayerchooser) 
            selectlayers.push(mainMap.layers[i]);

    var selectControl = new OpenLayers.Control.SelectFeature(selectlayers);
    var featurePopup = new PieGuide.Control.FeaturePopup({
        selectFeatureControl: selectControl
    });
    mainMap.addControl(featurePopup);
    mainMap.addControl(selectControl);
    selectControl.activate();

    if (!mainMap.getCenter()) 
    	//mainMap.setCenter(new OpenLayers.LonLat(526913, 182680), 0);
		mainMap.setCenter(new OpenLayers.LonLat(526913, 182200), 0);

    var mapdiv = OpenLayers.Util.getElement("map");

    mapdiv.style.visibility='visible';
	
	//raiseLayer();
	setupHacks();

}

/**
 * Setup hacks
 */
function setupHacks() {
	var bus = mainMap.getLayersBy('name',"Bus Stop")[0];
	var foot = mainMap.getLayersBy('name',"London Underground")[0];
	bus.events.register('visibilitychanged',null,BusRouteHack);
	foot.events.register('visibilitychanged',null,WalkingRouteHack);
	//mainMap.events.register('changelayer',null,BusRouteHack);
	//mainMap.events.register('changelayer',null,WalkingRouteHack);
}


function BusRouteHack() {
	var c = mainMap.getControlsBy('CLASS_NAME',"PieGuide.Control.BusRoutes")[0];
	var layer = mainMap.getLayersBy('name',"Bus Stop")[0];
	if (!layer.getVisibility()) {
		c.div.style.display = 'none';
	}
}

function WalkingRouteHack() {
	//console.log('wh');
	var c = mainMap.getControlsBy('CLASS_NAME',"PieGuide.Control.WalkingRoutes")[0];
	var layer = mainMap.getLayersBy('name',"London Underground")[0];
	if (!layer.getVisibility()) {
		c.div.style.display = 'none';
	} else {
		mainMap.zoomTo(2);
	}
}

function raiseLayer() {
	var routeLayer = mainMap.getLayersBy('name',"busroutes_markers_pgControlBusRoutes_26");
	routeLayer = (routeLayer.length>0) ? routeLayer[0]:false;
	if (routeLayer) {
		routeLayer.events.fallThrough = true;
		routeLayer.setZIndex(getMaxZIndexOfMapLayers()+1);//raiseLayer(routeLayer,5);
		console.log(routeLayer);
	}
}
	
function lowerLayer() {
	var routeLayer = mainMap.getLayersBy('name',"busroutes_markers_pgControlBusRoutes_26");
	routeLayer = (routeLayer.length>0) ? routeLayer[0]:false;
	if (routeLayer) {
		routeLayer.setZIndex(getMaxZIndexOfMapLayers()-2);//raiseLayer(routeLayer,5);
		console.log(routeLayer);
	}
}


function getMaxZIndexOfMapLayers() {
	var layers = mainMap.layers;
	var maxZIndex = 0;
	for (var ind=0, len = layers.length;ind < len; ind++) {
		if (maxZIndex < layers[ind].getZIndex())
			maxZIndex = layers[ind].getZIndex();
	}
	
	return maxZIndex;
}




