
	
		OpenLayers.ProxyHost = "../cgi-bin/proxy.cgi?url=";
		OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
	

        var map, select;

        function init(){
            var options = {
                projection: new OpenLayers.Projection("EPSG:900913"),
                displayProjection: new OpenLayers.Projection("EPSG:4326"),
                units: "m",
                maxResolution: 156543.0339,
                maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
                                                 20037508.34, 20037508.34),
		numZoomLevels: 16, minZoomLevel: 5, maxZoomLevel: 20
            };
            map = new OpenLayers.Map('map', options);
            var mapnik = new OpenLayers.Layer.TMS(
                "OpenStreetMap",
                "http://tile.openstreetmap.org/",
                {
                    type: 'png', getURL: osm_getTileURL,
                    displayOutsideMaxExtent: true,
                    attribution: '<a href="http://www.openstreetmap.org/">OpenStreetMap</a>'
                }
            );
            var gmap = new OpenLayers.Layer.Google("Google", {sphericalMercator:true});
            var sundials = new OpenLayers.Layer.Vector("InfoPoints", {
                projection: map.displayProjection,
                strategies: [new OpenLayers.Strategy.Fixed()],
                protocol: new OpenLayers.Protocol.HTTP({
                    url: "HG2009info.kml",
                    format: new OpenLayers.Format.KML({
                        extractStyles:true,
                        extractAttributes:true,	
                    })
                })
            });
			
			var gphy = new OpenLayers.Layer.Google(
				"Google Physical",
				{type: G_PHYSICAL_MAP, 'sphericalMercator':true}
				);
			//map.addLayer(gphy);	
			
			var gsat = new OpenLayers.Layer.Google(
				"Google Satellite",
				{type: G_SATELLITE_MAP, 'sphericalMercator':true}
				);
			//map.addLayer(gsat);	
			
			
			//tilecached ownership layer
			//	var ownership = new OpenLayers.Layer.WMS( "Land Ownership", 
			//		"http://whiteriverwild.org/cgi-bin/tilecache.cgi?", 
			//		{layers: 'ownership',
			//		reproject: false}, 
			//		{isBaseLayer:false, opacity:1, visibility:false}
			//		);  
				//map.addLayer(ownership);	
				
			var ownership = new OpenLayers.Layer.WMS( "Public Land Agency", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['topp:BLM', 'topp:State_land', 'topp:CO_ski_areas', 'topp:USFS_Colorado'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					);  	
			
			//uncached boundary layer
			//	boundary = new OpenLayers.Layer.WMS( "WRNF Boundary", 
			//		"http://spatialserver.net:8080/geoserver-ww/wms?", 
			//		{layers: 'topp:WRNF_Boundary',
			//		format: 'image/png', transparent: true}, 
			//		{isBaseLayer:false, opacity:1, displayInLayerSwitcher: false}
			//		);  
				//map.addLayer(boundary);
				
			//tilecached boundary layer
				var boundary = new OpenLayers.Layer.WMS( "WRNF Boundary",
					"http://whiteriverwild.org/cgi-bin/tilecache.cgi?",
					{layers: 'boundary',
					reproject: false},
					{isBaseLayer:false, opacity:1, displayInLayerSwitcher:false}
					);		
				
			//Invisible Hidden Gems layer for querying only
				var hg2 = new OpenLayers.Layer.WMS( "Hidden Gems", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: 'topp:WR_Wild_Proposal_0609',
					transparent: true}, 
					{opacity:1, isBaseLayer:false, displayInLayerSwitcher: true}
					);  
				//map.addLayer(hg);

			//Uncached Hidden Gems layer
				var hg3 = new OpenLayers.Layer.WMS( "Hidden Gems", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: 'wrw:WR_Wild_Proposal_06_02_10a',
					transparent: true}, 
					{opacity:1, isBaseLayer:false, displayInLayerSwitcher: true, visibility: true}
					);  
				//map.addLayer(hg3);

			//Uncached Hidden Gems Companion Areas layer
				var companion = new OpenLayers.Layer.WMS( "Companion Areas", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: 'wrw:Summit_Companion_20100513',
					transparent: true}, 
					{opacity:1, isBaseLayer:false, displayInLayerSwitcher: true, visibility: true}
					);  
				//map.addLayer(companion);

			//Uncached Hidden Gems CD2 Proposal layer
				var CD2 = new OpenLayers.Layer.WMS( "CD2 Proposal", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: 'wrw:CD2_WR_Wild_Proposal_06_02_10a',
					transparent: true}, 
					{opacity:1, isBaseLayer:false, displayInLayerSwitcher: true, visibility: true}
					);  
				//map.addLayer(CD2);
				
			//tilecached Hidden Gems layer
			//	var hg = new OpenLayers.Layer.WMS( "Hidden Gems",
			//		"http://whiteriverwild.org/cgi-bin/tilecache.cgi?",
			//		{layers: 'HG2009_10.04.04',
			//		reproject: false},
			//		{isBaseLayer:false, opacity:1}
			//		);
		
			//tilecached Hidden Gems Potential Future layer
				var hg2012 = new OpenLayers.Layer.WMS( "Hidden Gems Potential Future",
					"http://whiteriverwild.org/cgi-bin/tilecache.cgi?",
					{layers: 'HG2012_8.7.9',
					reproject: false},
					{isBaseLayer:false, opacity:1, visibility:false}
					);		 

			//invisible Hidden Gems Potential Future layer for querying only
			//	hg2012Query = new OpenLayers.Layer.WMS( "Invisible Hidden Gems Potential Future", 
			//		"http://spatialserver.net:8080/geoserver-ww/wms?", 
			//		{layers: 'topp:HG_2012_Proposal_Areas',
			//		transparent: true}, 
			//		{visiblity:false, opacity:0, isBaseLayer:false, displayInLayerSwitcher: false}
			//		);  
				//map.addLayer(hg2012); 
					
			//Invisible wilderness layer for querying only
			//	var wilderness = new OpenLayers.Layer.WMS( "Invisible Wilderness Areas", 
			//		"http://spatialserver.net:8080/geoserver-ww/wms?", 
			//		{layers: 'topp:wilderness_colorado',
			//		format: 'image/png', transparent: true}, 
			//		{opacity:1, isBaseLayer:false}
			//		);  
				//map.addLayer(wilderness); 
				
			//tilecached wilderness layer
				var wilderness = new OpenLayers.Layer.WMS( "Wilderness Areas",
					"http://whiteriverwild.org/cgi-bin/tilecache.cgi?",
					{layers: 'wildernessCO',
					reproject: false},
					{isBaseLayer:false, opacity:1}
					);	
					
			//Uncached trails and roads layers
				//trails = new OpenLayers.Layer.WMS( "WRNF Trails", 
					//"http://spatialserver.net:8080/geoserver-ww/wms?", 
					//{layers: 'topp:G_TRAILS',
					//format: 'image/png', transparent: true}, 
					//{isBaseLayer:false, opacity:1, visibility:false}
					//);  
				//map.addLayer(trails);	
				
				//var OpenRoads = new OpenLayers.Layer.WMS( "WRNF Roads", 
					//"http://spatialserver.net:8080/geoserver-ww/wms?", 
					//{layers: '[wrw:G_OPEN_ROADS'],
					//format: 'image/png', transparent: true}, 
					//{isBaseLayer:false, opacity:1, visibility:false}
					//);  
				//map.addLayer(roads);
				
			//tilecached roads and trails layer	
				 //var RoadsTrails = new OpenLayers.Layer.WMS( "WRNF Roads and Trails",
					//"http://whiteriverwild.org/cgi-bin/tilecache.cgi?",
					//{layers: 'roads_trails',
					//reproject: false},
					//{isBaseLayer:false, opacity:1}
					//);		

			var blmWSAs = new OpenLayers.Layer.WMS( "BLM WSAs", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['topp:BLM_WSAs'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					); 
			
			var WRNFrecWild = new OpenLayers.Layer.WMS( "WRNF Recommended Wilderness", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['wrw:WRNF_recommended_wilderness'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					); 

			var USFSroadless = new OpenLayers.Layer.WMS( "USFS Roadless Areas", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['wrw:GRANDMESA_UNCOMPAHGRE_GUNNISON_NFs_DRAFT CRAs_april2009', 'wrw:WHITERIVER_NF_DRAFT_CRAs_april2009'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					); 

			var G_DECOMM = new OpenLayers.Layer.WMS( "USFS to Decommission", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['wrw:G_DECOMM'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					);

			var G_OPEN_ROADS = new OpenLayers.Layer.WMS( "Open Roads", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['wrw:G_OPEN_ROADS'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					);

			var G_TRAILS = new OpenLayers.Layer.WMS( "WRNF Trails", 
					"http://spatialserver.net:8080/geoserver-ww/wms?", 
					{layers: ['wrw:G_TRAILS'],
					format: 'image/png', transparent: true, maxExtent: new OpenLayers.Bounds(-109.0, 37.0,
					            -103.6, 41.0)}, 
					{isBaseLayer:false, opacity:1}
					);


            map.addLayers([gphy, mapnik, gmap, gsat, ownership, USFSroadless, WRNFrecWild, blmWSAs, G_OPEN_ROADS, G_TRAILS, G_DECOMM, wilderness, CD2, companion, hg3, sundials, boundary]);

            select = new OpenLayers.Control.SelectFeature(sundials);
            
            sundials.events.on({
                "featureselected": onFeatureSelect,
                "featureunselected": onFeatureUnselect
            });
  
            map.addControl(select);
            select.activate();   
			map.addControl( new OpenLayers.Control.PanZoomBar() );
			map.addControl( new OpenLayers.Control.MousePosition() );
            map.addControl(new OpenLayers.Control.LayerSwitcher());

            map.zoomToExtent(
                new OpenLayers.Bounds(
                    -107.5, 38.8, -106, 39.25
                ).transform(map.displayProjection, map.projection)
            );
        }


		
        function onPopupClose(evt) {
            select.unselectAll();
        }
        function onFeatureSelect(event) {
            var feature = event.feature;
            var selectedFeature = feature;
            var popup = new OpenLayers.Popup.FramedCloud("chicken", 
                feature.geometry.getBounds().getCenterLonLat(),
                new OpenLayers.Size(350,450),
                "<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description,
                null, true, onPopupClose
            );
            feature.popup = popup;
			popup.setBackgroundColor("#8A8E7D");
			autoSize = false;			
            map.addPopup(popup);
			
        }
        function onFeatureUnselect(event) {
            var feature = event.feature;
            if(feature.popup) {
                map.removePopup(feature.popup);
                feature.popup.destroy();
                delete feature.popup;
            }
        }
        function osm_getTileURL(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 OpenLayers.Util.getImagesLocation() + "404.png";
            } else {
                x = ((x % limit) + limit) % limit;
                return this.url + z + "/" + x + "/" + y + "." + this.type;
            }
        }
