// Google Maps Interactive Script
/*

author: eric rihlmann, sl
lastupdated: 20080713

instructions:
1. define map meta values in dealer-meta.php
2. add setGoogleMaps(); to addDomLoadEvent function
3. assign values to mapvalues array in addDomLoadEvent (example: mapvalues['id'] = "google_map_hook";)
4. add link to script in header.php

*/ 

function setGoogleMap (mapvalues) {

	if (!GBrowserIsCompatible()) {return;}
	
	// get map values
	var mapid = mapvalues['id'];
	// convert numeric strings to numerals
	var lat = parseFloat(mapvalues['lat']);
	var long = parseFloat(mapvalues['long']);
	var zoomlevel = parseInt(mapvalues['zoom']);
	var dlrname = mapvalues['name'];
	var dlradr = mapvalues['address'];
	var dlradr2 = mapvalues['address2'];
	var dlrphone = mapvalues['phone'];
	var dlricon = mapvalues['icon'];
	var dlrshadow = mapvalues['iconshadow'];
	// set coordinates
	var coordinates = new GLatLng(lat,long);
	// directions container
	var directionsid = mapvalues['directionsid'];
	// form values
	var userstreet = "startstreet";
	var userzip = "startzip";
	var directionssubmit = "get_directions";

	
	// add directions function to submit button
	var googledirections = document.getElementById(directionssubmit);
	googledirections.onclick = function() {
		getDirections();
		return false;
	}

	// prints driving directions and rebuilds map
	function getDirections() {
		// get location values
		var startstreet = document.getElementById(userstreet).value;
		var startzip = document.getElementById(userzip).value;
		// format location values
		var plotpoints = startstreet+", "+startzip+" to "+dlradr+", "+dlradr2;
		// print location values for testing
		// alert(plotpoints);
		
		// resize map
		$("#google_map_hook").addClass("map_resize");
		$("#google_map_border").addClass("map_resize");
		// show print link
		$(".hidden_print").removeClass("hidden_print");
		
		// get map
		var maproute = new GMap2(document.getElementById(mapid)); // mapid pulled form map values
		maproute.addControl(new GSmallMapControl());

		// create <div id="driving_directions"> attach to parent container
		var directionscontainer = document.getElementById(directionsid)
		if (document.getElementById("driving_directions")) { // remove any existing directions
			var directionsdiv = document.getElementById("driving_directions");
			directionscontainer.removeChild(directionsdiv);
		}
		var directionsdiv = document.createElement("div");
		directionsdiv.setAttribute("id", "driving_directions");
		directionscontainer.appendChild(directionsdiv);

		// build map and write directions
		var printdirections = new GDirections(maproute, directionsdiv);
		// test for errors
		GEvent.addListener(printdirections, "error", handleErrors);
		printdirections.load(plotpoints);
		
		
		function handleErrors() {
			if (printdirections.getStatus().code != G_GEO_SUCCESS) {
				alert("unknown address");
				directionscontainer.removeChild(directionsdiv);
				clearOverlays();
			}
		}
	}


  	// set map location
	var map = new GMap2(document.getElementById(mapid));
		map.setCenter(coordinates, zoomlevel);
		map.addControl(new GSmallMapControl());
		// map.addControl(new GMapTypeControl()); ?>
		

		
	// build map overlay id="map_overlay"
		/* looks like
	<div id="map_overlay">
	<strong id="overlay_name">Dealer Name</strong>
	<address>Street <em id="overlay_city">City, State Zip</em></address>
	<span class="phone">Phone </span>
	<a href="#" id="overlay_url">Get Driving Directions »</a>
	</div> */ 
	var overlay = document.createElement("div");
		overlay.setAttribute("id","map_overlay");
		
	var olname = document.createElement("strong");
		olname.appendChild(document.createTextNode(dlrname));
		
	var oladr = document.createElement("address");
		oladr.appendChild(document.createTextNode(dlradr));
		
	var olcity = document.createElement("span");
		olcity.appendChild(document.createTextNode(dlradr2));
			
	var olphone = document.createElement("span");
		olphone.setAttribute("class","phone");
		olphone.appendChild(document.createTextNode(dlrphone));
		
	 /*  Add directions link
	var olurl = document.createElement("a");
		olurl.setAttribute("class","url");
		olurl.setAttribute("href","http://maps.google.com/maps?q=<?php echo str_replace(array(' '), array('+'), dealer_meta('address',1)) ?>,+<?php str_replace(array(' '), array('+'), dealer_meta('city',1)) ?>,+<?php dealer_meta('state') ?>+<?php dealer_meta('zipcode') ?>,+USA");
		olurl.appendChild(document.createTextNode("Get Driving Directions \u00bb")); 
	*/ 
		
	// put overlay together
	overlay.appendChild(olname)
	overlay.appendChild(oladr).appendChild(olcity);
	overlay.appendChild(olphone);
	// overlay.appendChild(olurl);

	// icon
	var baseIcon = new GIcon();
	var icon_src = dlricon;
		baseIcon.shadow = dlrshadow;
		baseIcon.iconSize = new GSize(32, 39);
		baseIcon.shadowSize = new GSize(37, 41);
		baseIcon.iconAnchor = new GPoint(12, 42);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
	  
	  
	// creates a marker at the given point, clicking the marker will hide it
	function createMarker(coordinates, overlay) {	
		var icon = new GIcon(baseIcon);
			icon.image = icon_src;
	
		var marker = new GMarker(coordinates, icon);
		GEvent.addListener(marker,"click", function() {
			map.openInfoWindow(coordinates, overlay);
		});
		return marker;
	}
	
	createOverlay();
	
	function createOverlay() {
		// adds the marker
		map.addOverlay(createMarker(coordinates, overlay));
	}
}