	// 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.inkandtoneralternative.com/app/content/gmaps/';
	var markerSetsExportDir = 'http://www.inkandtoneralternative.com/app/content/gmarker_sets/';
	var markerImagesDir = 'http://www.inkandtoneralternative.com/gmap_markers/';
	
	function load_gmaps(gmaps_array){
		// data from external xml file(s)
		for (var i = 0; i < gmaps_array.length; i++) {
			//alert(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['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('homemap',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]);
				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));
			// 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");
					for (var j = 0; j < markers.length; j++) {
						
						var loc_type = parseInt(GXml.value(markers[j].getElementsByTagName("loc_type")[0]));
						
						if(loc_type != 1){							
							var street_address = GXml.value(markers[j].getElementsByTagName("street_address")[0]);
							var city = GXml.value(markers[j].getElementsByTagName("city")[0]);
							var st = GXml.value(markers[j].getElementsByTagName("st")[0]);
							var zip = GXml.value(markers[j].getElementsByTagName("zip")[0]);
							var addressToGeocode = street_address + ' ' + city + ', ' + st + ' ' + zip;
							geocoder = new GClientGeocoder();
							 if (geocoder) {
								geocoder.getLatLng(addressToGeocode,
									function(point) {
										if (!point) {
										  //alert(addressToGeocode + " not found");
										} else { 							  
										  //alert("Found! " + addressToGeocode);
										}
									}
								);								
							  }							
						} else {
							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 label = GXml.value(markers[j].getElementsByTagName("label")[0]);
						var copy = GXml.value(markers[j].getElementsByTagName("copy")[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 html = '<div class="gmap_win" ><span><a target="_blank" href="'+url+'">'+label+'</a></span><br/>'+'<div class="gmap_win_copy" >'+ copy + '</div><br/>Ph ' + phone + '<br/><a href="mailto:'+email+'">' + email + '</a><br/>' + '<a target="_blank" href="'+url+'">'+url+'</a>'+'</div>';  
						var marker = createMarker(point,markertype,label,html);
						map.addOverlay(marker);
					}
				});
			}
			
		} else {
			alert("Sorry, Google Maps is not compatible with this browser");
		}
	}
    //]]>   
