	// gmapper.js 1-7-2006
	// Google Map generator ( marker data from external XML or js object, custom marker set )
	//
	// Create Map: 
	// 		Gload(mapDivID,dataSource,centerLat,centerLng,initZoom);
	//
	// 		mapDivID - a string (the ID of a div to contain map)
	// 		dataSource - 1. a string (xml filename) OR 2. a javascript object (contains marker data)
	// 		centerLat - decimal value (latitude at center of map)
	// 		centerLng - decimal value (longitude at center of map)
	// 		initZoom - integer (1-16, initial zoom level of map)
	//
	// Map functions:
	// 		document.getElementById(mapDivID).setCenter(lat, lng, zoom); //  move to target coords immediately
	// 		document.getElementById(mapDivID).panTo(lat, lng); // smooth scrolling when target coords are visible ( otherwise immediate ), does not affect zoom level
	
	
	
	// 1-7-2006 - added load data from js object; added panTo and setCenter functions; 
	// 11-30-2006 - marker data from external XML, custom marker set
	// ndalton@ausableweb.com
	
	//<![CDATA[
	
	var mapsExportDir = 'http://www.discoverknoxville.com/app/content/gmaps/';
	var markerSetsExportDir = 'http://www.discoverknoxville.com/app/content/gmarker_sets/';
	var markerImagesDir = 'http://www.discoverknoxville.com/gmap_markers/';
	
	function load_gmaps(gmaps_array){
		// data from external xml file(s)
		for (var i = 0; i < gmaps_array.length; i++) {
			div_id = gmaps_array[i][1];
			var dataURL = mapsExportDir + gmaps_array[i][0] + '.xml';
			GDownloadUrl(dataURL, function(data, responseCode) {
				var xml = GXml.parse(data);
				var maps = xml.documentElement.getElementsByTagName("map");
				for (var j = 0; j < maps.length; j++) {
					var mapdata = new Array();
					mapdata['map_size'] = GXml.value(maps[j].getElementsByTagName("map_size")[0]);
					switch (mapdata['map_size']){
					case 'x':
						mapdata['size_w'] = 150;
						mapdata['size_h'] = 150;
						break;
					case 's':
						mapdata['size_w'] = 250;
						mapdata['size_h'] = 250;
						break;
					case 'm':
						mapdata['size_w'] = 400;
						mapdata['size_h'] = 350;
						break;
					case 'l':
						mapdata['size_w'] = 640;
						mapdata['size_h'] = 350;
						break;
					case 'c':
						mapdata['size_w'] = GXml.value(maps[j].getElementsByTagName("size_w")[0]);
						mapdata['size_h'] = GXml.value(maps[j].getElementsByTagName("size_h")[0]);
						break;						
					}
					
					mapdata['marker_set_id_list'] = GXml.value(maps[j].getElementsByTagName("marker_set_id_list")[0]);
					mapdata['i_zoom'] = parseInt(GXml.value(maps[j].getElementsByTagName("i_zoom")[0]));
					mapdata['i_lat'] = parseFloat(GXml.value(maps[j].getElementsByTagName("i_lat")[0]));
					mapdata['i_lng'] = parseFloat(GXml.value(maps[j].getElementsByTagName("i_lng")[0]));
					mapdata['map_controls'] = parseInt(GXml.value(maps[j].getElementsByTagName("map_controls")[0]));
					mapdata['map_controls_pos'] = parseInt(GXml.value(maps[j].getElementsByTagName("map_controls_pos")[0]));
					mapdata['map_options'] = GXml.value(maps[j].getElementsByTagName("map_options")[0]);
					mapdata['map_type_control'] = GXml.value(maps[j].getElementsByTagName("map_type_control")[0]);
					mapdata['map_types'] = GXml.value(maps[j].getElementsByTagName("map_types")[0]);
					////////////
					mapdata['map_options_array'] = mapdata['map_options'].split(',');
					mapdata['map_types_array'] = mapdata['map_types'].split(',');
					mapdata['marker_set_array'] = mapdata['marker_set_id_list'].split(',');
					mapdata['dataSource'] = new Array();
					for (var k = 0; k < mapdata['marker_set_array'].length; k++) {
						mapdata['dataSource'][k] = markerSetsExportDir + mapdata['marker_set_array'][k] + '.xml';
					}
					//// call gload
					gload(div_id,mapdata)
					//alert(' marker sets: ' + marker_set_id_list + "\n" +'lat,lng,zoom: ' + parseFloat(i_lat) + ', '+ parseFloat(i_lng) + ' ('+ parseInt(i_zoom) + ')');
				}
			});
		}
	}
    function gload(mapDivID,mapdata) {
		if (GBrowserIsCompatible()) {
			
			// define custom marker set
			var mapMarkerPrefixes = new Array('red_arrow','orange_arrow','yellow_arrow','green_arrow','blue_arrow','cyan_arrow','violet_arrow','grey_arrow','white_arrow');
			var mapMarkers = new Array();
			for (var i = 0; i < mapMarkerPrefixes.length; i++) {
				thisPrefix = mapMarkerPrefixes[i];			
				mapMarkers[thisPrefix] = new GIcon();
				mapMarkers[thisPrefix].image = markerImagesDir + mapMarkerPrefixes[i] + ".png";
				mapMarkers[thisPrefix].iconSize = new GSize(16, 26);
				mapMarkers[thisPrefix].shadow = markerImagesDir + "arrow_shadow.png";
				mapMarkers[thisPrefix].shadowSize = new GSize(27, 26);
				mapMarkers[thisPrefix].iconAnchor = new GPoint(8, 26);
				mapMarkers[thisPrefix].infoWindowAnchor = new GPoint(1, 1);			
				mapMarkers[thisPrefix].infoShadowAnchor = new GPoint(1, 1);
				mapMarkers[thisPrefix].transparent = markerImagesDir + "arrow_trans.png";
				mapMarkers[thisPrefix].imageMap=[0,0,16,0,16,26,0,26,0,0];
			}
			
			
			
			// showTooltip() function
			function showTooltip(marker) {
				tooltip.innerHTML = marker.tooltip;
				var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
				var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
				var anchor=marker.getIcon().iconAnchor;
				var width=marker.getIcon().iconSize.width;
				var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width-1,- offset.y + point.y +anchor.y-1)); 
				pos.apply(tooltip);
				tooltip.style.visibility="visible";
			}
			
			// createMarker() function
			function createMarker(point,markertype,label,html) {	  	
				//var marker = new GMarker(point , mapMarkers[markertype]);
				var marker = new GMarker(point);
				marker.tooltip = '<div class="map_tooltip">'+label+'</div>';
				GEvent.addListener(marker, "click", function() {
					marker.openInfoWindowHtml(html);
					//window.open(url, 'newWindow')
				});
				GEvent.addListener(marker,"mouseover", function() {
					showTooltip(marker);
				});        
				GEvent.addListener(marker,"mouseout", function() {
					tooltip.style.visibility="hidden"
				});
				return marker;
			}
			
			/// define some map functions
			document.getElementById(mapDivID).panTo = function (lat,lng){map.panTo(new GLatLng(lat, lng));}
			document.getElementById(mapDivID).setCenter = function (lat,lng,zoom){map.setCenter(new GLatLng(lat, lng), zoom);}
			
			var map = new GMap2(document.getElementById(mapDivID), { size: new GSize(mapdata['size_w'],mapdata['size_h']) });
			// create tooltip div
			var tooltip = document.createElement("div");
			document.getElementById(mapDivID).appendChild(tooltip);
			tooltip.style.visibility="hidden";
				
			switch(mapdata['map_controls_pos']){
				case 0: pos = new GControlPosition(G_ANCHOR_TOP_LEFT,null);	break;
				case 1:	pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT,null); break;
				case 2:	pos = new GControlPosition(G_ANCHOR_TOP_RIGHT,null); break;
				case 3:	pos = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT,null);	break;					
			}
			switch(mapdata['map_controls']){					
				case 1: map.addControl(new GSmallZoomControl(),pos); break;
				case 2: map.addControl(new GSmallMapControl(),pos); break;
				case 3: map.addControl(new GLargeMapControl(),pos); break;		
			}
			
			
			if(mapdata['map_type_control']==1){
				/// remove default map types
				map.removeMapType(G_NORMAL_MAP);
				map.removeMapType(G_SATELLITE_MAP);
				map.removeMapType(G_HYBRID_MAP);
				////
				map.addControl(new GMapTypeControl());
				for (var i = 0; i < mapdata['map_types_array'].length; i++) {					
					switch(mapdata['map_types_array'][i]){					
						case 'n': map.addMapType(G_NORMAL_MAP); break;
						case 's': map.addMapType(G_SATELLITE_MAP); break;
						case 'h': map.addMapType(G_HYBRID_MAP); break;
						case 'p': map.addMapType(G_PHYSICAL_MAP); break;
						case 'v': map.addMapType(G_SKY_VISIBLE_MAP); break;
						case 'l': map.addMapType(G_MOON_VISIBLE_MAP); break;
						case 'm': map.addMapType(G_MARS_VISIBLE_MAP); break;
					}
				}
			}
			
			for (var i = 0; i < mapdata['map_options_array'].length; i++) {					
				switch(mapdata['map_options_array'][i]){					
					case '1': map.addControl(new GScaleControl());	 break;
					case '2': map.addControl(new GOverviewMapControl()); break;					
				}
			}
			
			//
			map.enableContinuousZoom();
			map.enableScrollWheelZoom();
			
			map.setCenter(new GLatLng(mapdata['i_lat'],mapdata['i_lng']),mapdata['i_zoom']);
			
			
	
			
			/* data from external xml file(s)*/
			for (var i = 0; i < mapdata['dataSource'].length; i++) {
			
			var dataURL = mapdata['dataSource'][i];
				GDownloadUrl(dataURL, function(data, responseCode) {
					var xml = GXml.parse(data);
					var markers = xml.documentElement.getElementsByTagName("marker");
					
					document.marker_list = '';
					
					for (var j = 0; j < markers.length; j++) {
					
						var g_lng = parseFloat(GXml.value(markers[j].getElementsByTagName("g_lng")[0]));
						var g_lat = parseFloat(GXml.value(markers[j].getElementsByTagName("g_lat")[0]));
						var point = new GLatLng(g_lat,g_lng);
						
						var country = GXml.value(markers[j].getElementsByTagName("country")[0]);
						var address_1 = GXml.value(markers[j].getElementsByTagName("address_1")[0]);
						var address_2 = GXml.value(markers[j].getElementsByTagName("address_2")[0]);
						var city = GXml.value(markers[j].getElementsByTagName("city")[0]);
						var state = GXml.value(markers[j].getElementsByTagName("state")[0]);
						var zip_code = GXml.value(markers[j].getElementsByTagName("zip_code")[0]);
						var province = GXml.value(markers[j].getElementsByTagName("province")[0]);
						var postal_code = GXml.value(markers[j].getElementsByTagName("postal_code")[0]);
						
						var label = GXml.value(markers[j].getElementsByTagName("label")[0]);
						var loc_desc = GXml.value(markers[j].getElementsByTagName("loc_desc")[0]);
						var phone = GXml.value(markers[j].getElementsByTagName("phone")[0]);
						var email = GXml.value(markers[j].getElementsByTagName("email")[0]);
						var url = GXml.value(markers[j].getElementsByTagName("url")[0]);
						var markertype = GXml.value(markers[j].getElementsByTagName("image")[0]);
						
						var csz = '';
						if(country==0){
							csz = city + ', ' + state + ' ' + zip_code;
						} else {
							csz = city + ', ' + province + ' ' + postal_code;
						}
						
						
						var html = '<div class="gmap_win" ><span>';
						html = html + label+'</span><br/>';
						if(address_2!=''){
							html = html + address_1 + ' ' + address_2 + '<br/>' + csz + '<br/>';
						} else {
							html = html + address_1 + '<br/>' + csz + '<br/>';
						}
						
						if(phone!=''){
							html = html + 'Ph ' + phone + '<br/>';
						}
						if(email!=''){
							html = html + '<a href="mailto:'+email+'">' + email + '</a><br/>';
						}
						html = html + '<div class="gmap_win_copy" ><br/>'+ loc_desc + '</div><br/>';
						if(url!=''){
							html = html + '<a target="_blank" href="'+url+'">'+url+'</a>'+'</div>';
						}
						
						var marker = createMarker(point,markertype,label,html);
						map.addOverlay(marker);
						
						
						if(url!=''){
							url_link = '<span class="map_url" ><a target="_blank" alt="Visit '+url+'" title="Visit '+url+'" href="'+url+'">' + 'Website' + '</a></span>';
						} else {
							url_link = '';
						}
						if(phone!=''){
							phone_span = '<span class="map_phone" >' + phone + '</span>';
						} else {
							phone_span = '';
						}
						document.marker_list = document.marker_list + '<span class="map_label" >' + label + '</span>'+url_link+phone_span;	
						
						var open_map_link = 'http://maps.google.com/maps?f=q&hl=en&q=' + label + ' ' + address_1 + ' ' + address_2 + ' ' + csz + '&radius=1.000000';
						
						if(address_2!=''){
							document.marker_list = document.marker_list + '<span class="map_address" >' + '<a target="_blank" alt="Open Map in New Window" title="Open Map in New Window" href="'+open_map_link+'">' + address_1 + ' ' + address_2 + ' ' + csz + '</a></span>';
						} else {
							document.marker_list = document.marker_list + '<span class="map_address" >' + '<a target="_blank" alt="Open Map in New Window" title="Open Map in New Window" href="'+open_map_link+'">' + address_1 + ' ' + csz + '</a></span>';
						}
						document.marker_list = document.marker_list + '<br/>';
						
					}
					if (document.getElementById('marker_listing')) { 
						document.getElementById('marker_listing').innerHTML = document.marker_list;
					}
					
				});
			}
			
		} else {
			alert("Sorry, Google Maps is not compatible with this browser");
		}
	}
    //]]>   