function loadMap () {
	if (GBrowserIsCompatible()) {
    	var map = new GMap2(document.getElementById("map"));
		var geocoder = new GClientGeocoder();
		var address = "777 Terrace Avenue, Hasbrouck Heights, NJ 07604"
		// Create our "tiny" marker icon
		var icon = new GIcon();
		icon.image = "images/mapPushPin.png";
		icon.shadow = "images/mapPushPinShadow.png";
		icon.iconSize = new GSize(69, 62);
		icon.shadowSize = new GSize(69, 62);
		icon.iconAnchor = new GPoint(35, 67);
		icon.infoWindowAnchor = new GPoint(30, 3);
		
		var createDirection = function(point) {
			var p = sdc('p', 'Directions: ', {"id":"iwin"});
			var seperator = document.createTextNode(' - ');
			var toLink = sdc('a', 'To Here', {'href':'#'});
			var fromLink = sdc('a', 'From Here', {'href':'#'});
			appendChildren(p, [toLink, seperator, fromLink]);					
			
			var toText = sdc('p', 'To: ');
			var fromText = sdc('p', 'From: ');
			var aTextNode1 = document.createTextNode(address);
			var aTextNode2 = document.createTextNode(address);
			var br1 = sdc('br');
			var br2 = sdc('br');
			toText = appendChildren(toText, [br1, aTextNode1]);
			fromText = appendChildren(fromText, [br2, aTextNode2]);
			
			var toForm   = sdc('form',  '', {'action': 'http://maps.google.com/maps', 'method': 'get', "target": "_blank"});
			var toLabel  = sdc('label', 'From: ', {"for":"saddr"});
			var toSaddr  = sdc('input',  '', { "type":"text", "size":"20", "maxlength":"40", "name": "saddr", "id":"saddr", "value": "", "class":"text"});
			var toDaddr  = sdc('input',  '', { "type":"hidden", "name": "daddr", "id":"daddr", "value":  point.y + ',' + point.x + "(Zymes llc.)" });
			var toSubmit = sdc("input", '', {'type':'submit', 'value':'Get Directions'});
			appendChildren(toForm, [toLabel, toSaddr, toDaddr, toSubmit]);
			
			var fromForm   = sdc('form',  '', {'action': 'http://maps.google.com/maps', 'method': 'get', "target": "_blank"});
			var fromLabel  = sdc('label', 'To: ', {"for":"daddr"}); 
			var fromSaddr  = sdc('input',  '', { "type":"text", "size":"20", "maxlength":"40", "name": "daddr", "id":"daddr", "value": "", "class":"text"});
			var fromDaddr  = sdc('input',  '', { "type":"hidden", "name": "saddr", "id":"saddr", "value": point.y + ',' + point.x + "(Zymes llc.)" });
			var fromSubmit = sdc("input", '', {'type':'submit', 'value':'Get Directions'});					
			appendChildren(fromForm, [fromLabel, fromSaddr, fromDaddr, fromSubmit]);
			
			/**
			 * Show the to form */
			toLink.className = toLink.className == 'selected' ? '' : 'selected';
			p.appendChild(toText);
			p.appendChild(toForm);
						
			$(toLink).click(function(){				
				this.blur();
				fromLink.className = (fromLink.className == 'selected') ? '' : '';
				if (this.className != "selected") {this.className = "selected";	} else{ return false; }						
				if (p.lastChild == fromForm) p.removeChild(fromForm);
				if (p.lastChild == fromText) p.removeChild(fromText);
				p.appendChild(toText);
				p.appendChild(toForm);			
				return false;
			});
			
			$(fromLink).click(function(){
				this.blur();
				
				toLink.className = (toLink.className == 'selected') ? '' : '';
				if (this.className != "selected") {this.className = "selected";	} else{ return false; }
				if (p.lastChild == toForm) p.removeChild(toForm);
				if (p.lastChild == toText) p.removeChild(toText);
				p.appendChild(fromText);
				p.appendChild(fromForm);
				return false;
			});					
			return p;
		}
		
		/**
		 * Helper function for apppending groups of children elements to parents */
	 	var appendChildren  = function (parent, children) {
	 		for(var i=0,child;child=children[i];i++){
				parent.appendChild(child);
			}
			return parent;
	 	}	
	
		/**
		 * Simply DOM Creator */
		var sdc = function(node, v, attr) {
			var d = document;
			var ret = d.createElement(node);
			if (v) {
				ret.appendChild(d.createTextNode(v));
			}
			for (a in attr) {
				ret.setAttribute(a, attr[a]);
			}
			return ret;					
		}
		
		geocoder.getLatLng(
			address,
		    function(point) {
		    	if (!point) {
		        	//alert(address + " not found");
		    	} else {
		        	map.setCenter(point, 13);
					
					var marker = new GMarker(point, icon);
		        	map.addOverlay(marker);
					map.addControl(new GSmallMapControl());
					map.addControl(new GMapTypeControl());
					
					var html = createDirection(point);
		        	GEvent.addListener(marker, "click", function() {
						marker.openInfoWindow(html);
					});
		    	}
		    });					
  	}
}


$(document).ready(loadMap);
