if (!self.gv_maptypecontrol_style) { gv_maptypecontrol_style = (self.maptypecontrol_style) ? maptypecontrol_style : 'menu'; } // BC
if (self.gv_filter_map_types==null) { gv_filter_map_types = (self.filter_map_types!=null) ? filter_map_types : true; }

function GV_Show_Center_Coordinates(map,id) {
	if (document.getElementById(id)) {
		var lat = map.getCenter().lat().toFixed(5);
		var lng = map.getCenter().lng().toFixed(5);
		document.getElementById(id).innerHTML = "Center: "+lat+","+lng;
	}
}

var gv_crosshair_temporarily_hidden = true;
function GV_Show_Hidden_Crosshair(map,id) {
	// only do something upon the FIRST movement of the map!
	if (self.gv_crosshair_temporarily_hidden) {
		document.getElementById(id).style.display = 'block';
		gv_crosshair_temporarily_hidden = false;
	}
}

function GV_Recenter_Crosshair(map,container_id,crosshair_size) {
	if (document.getElementById(container_id)) {
		document.getElementById(container_id).style.position = 'absolute';
		document.getElementById(container_id).style.top = Math.round(map.getContainer().clientHeight/2-(crosshair_size/2))+'px';
		document.getElementById(container_id).style.left = Math.round(map.getContainer().clientWidth/2-(crosshair_size/2))+'px';
	}
}

	var USGS_TOPO_TILES = WMSCreateMap('Topo','Topo maps by USGS via terraserver-usa.com','Topo maps unavailable',5,17,400,'http://terraservice.net/ogcmap6.ashx?version=1.1.1&request=GetMap&styles=&srs=EPSG:4326&format=image/jpeg&bgcolor=0xCCCCCC&exceptions=INIMAGE&layers=DRG');
	var USGS_AERIAL_TILES = WMSCreateMap('Aerial','Imagery by USGS via terraserver-usa.com','USGS aerial imagery unavailable',7,18,400,'http://terraservice.net/ogcmap6.ashx?version=1.1.1&request=GetMap&styles=&srs=EPSG:4326&format=image/jpeg&bgcolor=0xCCCCCC&exceptions=INIMAGE&layers=DOQ');
	var MYTOPO_TILES = MyTopoCreateMap();

function GV_Add_Custom_Layers(map) {
	map.addMapType(USGS_TOPO_TILES);
	map.addMapType(USGS_AERIAL_TILES);
}

function WMSCreateMap(name,copyright,errorMessage,minResolution,maxResolution,tileSize,baseUrl) {
	var tileLayer = new GTileLayer(new GCopyrightCollection(copyright),minResolution,maxResolution);
	tileLayer.baseUrl = baseUrl;
	tileLayer.tileSize = tileSize;
	tileLayer.getTileUrl = WMSGetTileUrl;
	tileLayer.getCopyright = function() { return { prefix:'',copyrightTexts:[copyright]}; };
	var tileLayers = [tileLayer];
	return new GMapType(tileLayers,G_SATELLITE_MAP.getProjection(),name,{errorMessage:errorMessage,tileSize:tileSize});
}
function WMSGetTileUrl(tile,zoom) {
	var southWestPixel = new GPoint(tile.x*this.tileSize,(tile.y+1)*this.tileSize);
	var northEastPixel = new GPoint((tile.x+1)*this.tileSize,tile.y*this.tileSize);
	var southWestCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(southWestPixel,zoom);
	var northEastCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(northEastPixel,zoom);
	var bbox = southWestCoords.lng()+','+southWestCoords.lat()+','+northEastCoords.lng()+','+northEastCoords.lat();
	return this.baseUrl+'&bbox='+bbox+'&width='+this.tileSize+'&height='+this.tileSize;
}


/**************************************************
 * Custom map-type control:
 **************************************************/
function GV_MapTypeControl() {}

	GV_MapTypeControl.prototype = new GControl();
	GV_MapTypeControl.prototype.initialize = function(map) {
		GV_Add_Custom_Layers(map);
		var map_types = [
			{ label:'Aerial BW',type:'USGS_AERIAL_TILES',title:'USGS aerial photos (black/white)',bounds:[-152,17,-65,65],excluded:[] }
			,{ label:'Satellite',type:'G_HYBRID_MAP',title:'Google "hybrid" map',bounds:[-180,-90,180,90],excluded:[] }
			,{ label:'Street',type:'G_NORMAL_MAP',title:'Google street map',bounds:[-180,-90,180,90],excluded:[] }
			,{ label:'Terrain',type:'G_PHYSICAL_MAP',title:'Google terrain map',bounds:[-180,-90,180,90],excluded:[] }
			,{ label:'TOPO',type:'USGS_TOPO_TILES',title:'USGS topographic map',bounds:[-169,18,-66,72],excluded:[] }
			,{ label:'MyTOPO',type:'MYTOPO_TILES',title:'U.S. / Canadian topo tiles from MyTopo.com',bounds:[-141,22,-52,85],excluded:[],country:'us,ca' }
			//,{ label:'Earth',type:'G_SATELLITE_3D_MAP',title:'Google Earth',bounds:[-180,-90,180,90],excluded:[] }
		];
		var center_lat = map.getCenter().lat();
		var center_lng = map.getCenter().lng();
		
		if (gv_maptypecontrol_style == 'menu') {
			var map_selector = document.createElement("select");
			map_selector.id = 'map_selector';
			map_selector.style.font = '16px Helvetica';
			map_selector.style.backgroundColor = '#FFCC00';
			for (j=0; j<map_types.length; j++) {
				if (!gv_filter_map_types || gv_filter_map_types < 0 || ( (center_lng >= map_types[j]['bounds'][0] && center_lat >= map_types[j]['bounds'][1] && center_lng <= map_types[j]['bounds'][2] && center_lat <= map_types[j]['bounds'][3]) && !(center_lng >= map_types[j]['excluded'][0] && center_lat >= map_types[j]['excluded'][1] && center_lng <= map_types[j]['excluded'][2] && center_lat <= map_types[j]['excluded'][3]) ) ) {
					var opt = document.createElement("option");
					opt.value = map_types[j]['type'];
					opt.appendChild(document.createTextNode(map_types[j]['label']));
					map_selector.appendChild(opt);
					if (map.getCurrentMapType() == eval(opt.value)) { map_selector.selectedIndex = map_selector.length - 1; }
				}
			}
			GEvent.addDomListener(map_selector, "change", function(){map.setMapType(eval(this.value));

var point = gmap.getCenter();
var zZoom = gmap.getZoom();

        var myMapType = gmap.getCurrentMapType();
        if (myMapType == USGS_TOPO_TILES) {
          var tType = 1;
        }
        else if (myMapType == G_NORMAL_MAP) {
          var tType = 2;
        }
        else if (myMapType == G_PHYSICAL_MAP) {
          var tType = 3;
        }
        else if (myMapType == USGS_AERIAL_TILES) {
          var tType = 4;
        }
        else if (myMapType == G_HYBRID_MAP) {
          var tType = 5;
        }
        else if (myMapType == MYTOPO_TILES) {
          var tType = 6;
        }
	else{ var tType = 0;}

var statusLAT = Math.round(point.y*10000)/10000;
var statusLON = Math.round(point.x*10000)/10000;
var GPS_ARRAY="";
for (var egi=0; egi<GPS_CACHE.length; egi++) {GPS_ARRAY+=GPS_CACHE[egi]+',';}

document.getElementById("chl").value = 'http://hikearizona.com/location_g.php?LAT='+statusLAT+'&LON='+statusLON+'&ZL='+zZoom+'&M='+tType+'&G='+GPS_ARRAY;
} );
			map.getContainer().appendChild(map_selector);
			return map_selector;
		} else {
			var map_type_container = document.createElement("div");
			for (j=0; j<map_types.length; j++) {
				if (!gv_filter_map_types || gv_filter_map_types < 0 || ( (center_lng >= map_types[j]['bounds'][0] && center_lat >= map_types[j]['bounds'][1] && center_lng <= map_types[j]['bounds'][2] && center_lat <= map_types[j]['bounds'][3]) && !(center_lng >= map_types[j]['excluded'][0] && center_lat >= map_types[j]['excluded'][1] && center_lng <= map_types[j]['excluded'][2] && center_lat <= map_types[j]['excluded'][3]) ) ) {
					var maplink = document.createElement("div");
					maplink.className = 'gv_maptypelink';
					if (self.gv_maptypecontrol && map.getCurrentMapType() == eval(map_types[j]['type'])) {
						maplink.className = 'gv_maptypelink gv_maptypelink_selected';
					}
					maplink.title = map_types[j]['title'];
					maplink.type = map_types[j]['type'];
					map_type_container.appendChild(maplink);
					maplink.appendChild(document.createTextNode(map_types[j]['label']));
					GEvent.addDomListener(maplink, "click", function(){
						map.setMapType(eval(this.type));
						if (self.gv_maptypecontrol) {
							map.removeControl(gv_maptypecontrol);
							map.addControl(gv_maptypecontrol);
						}
					} );
				}
			}
			map.getContainer().appendChild(map_type_container);
			return map_type_container;
		}
	}
	GV_MapTypeControl.prototype.getDefaultPosition = function() {
		return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7,7));
	}

function MyTopoCreateMap() { // http://maps2.mytopo.com/mytopo/1.0.0/topoG/
	var map_name = (self.gv_options && gv_options['map']) ? gv_options['map'] : 'gmap'; var map = eval('self.'+map_name);
	var affiliate_id = 'gpsvisualizer';
	var minResolution = 7;
	var maxResolution = 16;
	var s = -90; var w = -180; var n = 90; var e = 180;
	var copyright = 'Topo maps &#169; <a href="http://www.mytopo.com/?pid='+affiliate_id+'" target="_blank" onclick="if(this.href.toString().indexOf(\'&lat=\')>-1){this.href=this.href.toString().replace(/&lat=-?\\d+\\.?\\d*/,\'&lat=\'+'+map_name+'.getCenter().lat()).replace(/&lon=-?\\d+\\.?\\d*/,\'&lon=\'+'+map_name+'.getCenter().lng());}else{this.href+=\'&lat=\'+'+map_name+'.getCenter().lat()+\'&lon=\'+'+map_name+'.getCenter().lng();}">MyTopo.com</a>';
	var tileLayer = new GTileLayer( new GCopyrightCollection( copyright ), minResolution, maxResolution, {
		isPng: true, 
		tileUrlTemplate: 'http://maps.mytopo.com/'+affiliate_id+'/tilecache.py/1.0.0/topoG/{Z}/{X}/{Y}.png'
	});
	tileLayer.getCopyright = function() { return copyright; };
	tileLayer.layer = 'MyTopo.com'; 
	var tileLayers = [ tileLayer ];
	
	return new GMapType(tileLayers, G_SATELLITE_MAP.getProjection(), "MyTopo",{errorMessage:'MyTopo tiles unavailable',tileSize:256});
}
