var map;

var dirPanel = null;
var directions = null;

var geoCode = null;

function viewLoc(map, point, zLevel) {
	var cpoint = map.getCenter();

	if (Math.round(point.y) != Math.round(cpoint.y) || Math.round(point.x) != Math.round(cpoint.x)) {
		map.panTo(new GLatLng(point.y, point.x));
		window.setTimeout(function() {
			map.setCenter(new GLatLng(point.y, point.x));
			map.setZoom(zLevel);
		}, 1000);
	}
	else {
			map.setCenter(new GLatLng(point.y, point.x));
			map.setZoom(zLevel);
	}
}

function loadMap(sMapX, sMapY, sMapName, sZoom) {
	if (GBrowserIsCompatible()) {
		if (sZoom == null) {
			sZoom = 13;
		}
		
		// start the map
		var map = new GMap2(document.getElementById(sMapName));
		map.addControl(new GLargeMapControl());
		map.setCenter(new GLatLng(sMapY, sMapX));
		map.setZoom(sZoom);

		function createMarkerMM(point, html) {
			var markerMM = new GMarker(point);

			GEvent.addListener(markerMM, "click", function() {
				map.closeInfoWindow();
				viewLoc(map, point, 15);
			});

			return markerMM;
		}

		function createMarker(i, point, html) {
			var marker = new GMarker(point);

			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});

			return marker;
		}

		GDownloadUrl("/_includes/map.xml", function(data, responseCode) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var html = "<div class='mapDetails'>";
				html = html +"<div><b style='text-transform: uppercase'>"+ markers[i].getAttribute("nme") +"</b></div>";
				html = html +"<div>"+ markers[i].getAttribute("addr") +"<br />"+ markers[i].getAttribute("addr2") +"</div>";
				html = html +"<div><b class='blue'>Ph</b>: "+ markers[i].getAttribute("ph") +"</div>";
				html = html +"<div><b class='blue'>Fax</b>: "+ markers[i].getAttribute("fax") +"</div>";
				html = html +"<div><b class='blue'>Email</b>: <a href='mailto:"+ markers[i].getAttribute("eml") +"' class='lgrey'>"+ markers[i].getAttribute("eml") +"</a></div>";
				html = html +"</div>";

				map.addOverlay(createMarker(i, point, html));
			}
		});

		//var marker = createMarker(point);
		//map.addOverlay(marker);
	}
}

var geoCode = null;

function hideMapDir(sMapX, sMapY) {
	document.getElementById('btnHide').style.display = 'none';
	document.getElementById('dirDetails').style.display = 'none';
	
	if (sMapX != null && sMapY != null) {
		loadMap(sMapX, sMapY, 'map');
	}
}

function getMapDir(address, pointY, pointX) {
	if (GBrowserIsCompatible()) {
		geoCode = new GClientGeocoder();

		geoCode.getLatLng(address,
			function(point) {
				if (!point) {
					alert("Address: \'"+ address + "\' not found in Google Database");
				}
				else {
					var dirMap = new GMap2(document.getElementById('map'));
					dirMap.addControl(new GLargeMapControl());

					document.getElementById("dirContainer").innerHTML = '';

					var directions = new GDirections(dirMap, document.getElementById("dirContainer"));
					directions.load(point.y +','+ point.x +" to "+ pointY +","+ pointX);

					document.getElementById("dirDetails").style.display = '';
					document.getElementById("btnHide").style.display = '';
				}
			}
		);
	}
}
