// file: MapInitDefaults.js
// author: Matthew Lawhead
// purpose: module to store functionality related to 
//          setting up base layers and controls in Google Maps map div
//
// namespace: TOF (The Other Firm)
// application: ConsRegistry (Conservation Registry)
//
// usage: TOF.ConsRegistry.MapInitDefaults.init(map_div, portal);
// requires: GMaps API key, TOF.js, ConsRegistry.js, 
//           js file defining MapOverlayControl (my_gmaps_lib.js), wms-gs.js
//	         Portal.js
//   
        
var portalSites; // global variable hack for NCED portal
TOF.ConsRegistry.MapInitDefaults = function(){
	var map;
	var map_type;
	var portal;

	function init(map_div, portal_subdomain, mapType, includeBaseLayers) {
		map_type = mapType;
		// NOTE: For debugging purposes use the PortalConfigDebug;
		//portal = new Portal(portal_subdomain, PortalConfigDebug);
		portal = new Portal(portal_subdomain);

		if (GBrowserIsCompatible()) {
			// map = new GMap2(document.getElementById(map_div), {size: new GSize(1214,736)});   
			map = new GMap2(document.getElementById(map_div));   
			
			// EXTENT AND CENTER
			var center = portal.getExtent();
			map.setCenter(new GLatLng(center.lat, center.lng), center.zoom);
			
			// Base Layers
			map.addMapType(G_PHYSICAL_MAP);								
			map.removeMapType(G_SATELLITE_MAP);

			map.addControl(new GScaleControl());

			if(includeBaseLayers){ 
				portal.getBaseLayers().each(function(layer){
				    map.addMapType(layer);
				});
			}

			map.addControl(mapLegends());
			
			// Overlays
			var includeProjects = (map_type != "browse" || portal_subdomain == "NCED");
			map.addControl(new OverlaySwitch(portal.getOverlays(includeProjects)));

			map.setMapType(G_PHYSICAL_MAP);
			// NAVIGATION CONTROLS
			// map.addControl(new GSmallMapControl());				

			var boxZoomPos;
			// Note: requires GMaps v 2.147 to work; change version in _gmap_api.rhtml
			if(map_type == "edit"){
				//map.addControl(new GSmallMapControl());	
				boxZoomPos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0,100));
				map.addControl(new GSmallZoomControl3D(), 
											 new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(12, 40)));
			}
			else{
				boxZoomPos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(14,277));// 252));
				map.addControl(new GLargeMapControl3D());
			}	
			
			map.addControl(boxZoomControl(), boxZoomPos);
			

			if(map_type == "browse"){
				if(portal_subdomain != "NCED"){
					map.addOverlay(portal.allProjectSites());
				}
				if(portal_subdomain != 'USA'){
					portalSites = portal.portalProjectSites();
					if(portalSites){
						map.addOverlay(portalSites);
					}
				}
			}

			return map;
		}
	}
	
	
	function mapLegends(){
		var legends = {
		  legends: 
			{"Ownership": [{"color": "#FEE679", "text": "BLM", "alt":"Bureau of Land Management"},
										 {"color": "#FFFFB3", "text": "BOR", "alt" : "Bureau of Reclamation"},
										 {"color": "#FBB4CE", "text": "DOD", "alt": "Dept. of Defense"},
										 {"color": "#CCEBC5", "text": "FS", "alt" : "Forest Service"},
										 {"color": "#7FCCA7", "text" : "FWS", "alt": "Fish &amp; Wildlife Service"},
										 {"color": "#CABDDC", "text" : "NPS", "alt":"National Park Service"},
										 {"color": "#E4C49F", "text" : "Other", "alt": "Other Federal"}],
			 "LandCover": [
				{"color": "#628DC0", "text": "Water", "alt":"Open Water"},
				{"color": "#FBFFFF", "text": "Ice/snow", "alt":"Perennial Ice/Snow"},
				{"color": "#FFE2E4", "text": "Residential 1", "alt":"Low Intensity Residential"},
				{"color": "#FCB19E", "text": "Residential 2", "alt":"High Intensity Residential"},
				{"color": "#EA584B", "text": "Commercial", "alt":"Commercial/Industrial/Transportation"},
				{"color": "#D7D2BF", "text": "Bare Ground", "alt":"Bare Rock/Sand/Clay"},
				{"color": "#AFB0B4", "text": "Gravel", "alt":"Quarries/Strip Mines/Gravel Pits"},
				{"color": "#523E6F", "text": "Transitional", "alt":"Transitional"},
				{"color": "#7CCE7C", "text": "Deciduous", "alt":"Deciduous Forest"},
				{"color": "#217E49", "text": "Evergreen", "alt":"Evergreen Forest"},
				{"color": "#D5E9AA", "text": "Mixed Forest", "alt":"Mixed Forest"},
				{"color": "#E2C397", "text": "Shrubland", "alt":"Shrubland"},
				{"color": "#C1AD78", "text": "Orchards", "alt":"Orchards/Vineyards/Other"},
				{"color": "#FFECA9", "text": "Grasslands", "alt":"Grasslands/Herbaceous"},
				{"color": "#FFF963", "text": "Pasture", "alt":"Pasture/Hay"},
				{"color": "#CA8F4B", "text": "Row Crops", "alt":"Row Crops"},
				{"color": "#796A4D", "text": "Small Grains", "alt":"Small Grains"},
				{"color": "#F4F2C9", "text": "Fallow", "alt":"Fallow"},
				{"color": "#F79B2C", "text": "Urban Grass", "alt":"Urban/Recreational Grasses"},
				{"color": "#BDE7F7", "text": "Wetland 1", "alt":"Woody Wetlands"},
				{"color": "#9CC6DC", "text": "Wetland 2", "alt":"Emergent Herbaceous Wetlands"}]},
			nameSubstitutions : {"Hybrid" : "Satellite"}}
		return new LegendMapTypeControl(legends);
	}
	
	// Control for Box Zoom
	// Look here for options: 
	// http://gmaps-utility-library.googlecode.com/svn/trunk/dragzoom/release/examples/dragzoomoptions.html
	function boxZoomControl(){
		var styleOpts = {};
		var otherOpts = {};
		
		otherOpts.backButtonEnabled = false;
		otherOpts.overlayRemoveTime = 500;
		otherOpts.buttonHTML =  '<img src="/images/bu-map_edit.png" class="png" \
						alt="Select Zoom area..." title="Select Zoom area..." width="22" \
						height="22" border="0" />';
		otherOpts.buttonStyle = {margin: '0 0 0 12px', padding: '0', border: 'none'};
		otherOpts.buttonStartingStyle = {display: 'block', width: '22px', 
																		 height: '22px', background: 'transparent'};
		otherOpts.backButtonStyle = {display: 'none', background: '#FFF', 
																 width: 'auto', height: 'auto', margin: '0 0 0 15px', 
																padding: '0 3px', font: 'normal 1em/1.2 Arial, sans-serif', 
																color: '#000', border: 'solid 1px #000'};
		otherOpts.buttonZoomingHTML = 'Click and drag to select a region...';
		otherOpts.buttonZoomingStyle = {width: '90px', height: 'auto', margin: '1px 0 0 15px', 
																		padding: '2px 4px', border: 'solid 1px #000', 
																		font: 'normal 1em/1.2 Arial, sans-serif', color: '#000', 
																		background: '#FFF'};
		otherOpts.backButtonHTML = '&laquo; back';
		
		return new DragZoomControl(styleOpts, otherOpts, {});
	}

	// return object containing public methods and attributes
	return {
		init:init
	};

}();
