/***********************************************************************************
 * Class: CGMap
 * Dependencies: none
 * Description:
 *   Google map class
 *
 ***********************************************************************************/

	// Window class
	function CGMap() {}
	
	// Check server name for correct map id
	switch(document.location.href.replace(/^http:\/\/(www\.)*|\/.*$/ig, '').toLowerCase()) {
	case 'localhost':	CGMap.MAP_ID = 'ABQIAAAAmOOWRAh4Orkt1hppiDNP_xT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRXtAfwj64L_SRnvaPCUiNwMa3S1A'; break;
	case 'server':		CGMap.MAP_ID = 'ABQIAAAAmOOWRAh4Orkt1hppiDNP_xQaOzcbF5ealenFI9Pv5eWXfr2UbRSbEOxlP1a2pnXf_4CE8BrY8DcTyQ'; break;
	case 'metronet.ie':	CGMap.MAP_ID = 'ABQIAAAAmOOWRAh4Orkt1hppiDNP_xTBRqcwQPZzgfT5FBVy0N9vIv40ZRSzH8c2WQu0EacbYIRT7m5SOR4xIg'; break;
	case 'itsa.ie':		CGMap.MAP_ID = 'ABQIAAAAIhgQaeNQ7GKX01DUR8J2WxSFZdzUbpE1PbnAw_xolQYJN_NBihQ_ZoddoGa1NCg5flE4qjQHhPQSiw'; break;
	default:			CGMap.MAP_ID = 'ABQIAAAA6fjYVT0ZahxtpZciGEdRJhRMXNtma3wkVH26KQWssZah6hJ2KhSoq_hWZOGBo0YpOv9fjMzya3ykuA'; break;
	};

	CGMap.MAP_VERSION = 2;
	CGMap.MAP_SCRIPT_URL = 'http://maps.google.com/maps?file=api&amp;v=' + CGMap.MAP_VERSION + '&amp;key=' + CGMap.MAP_ID;
	CGMap.MAP_SHOW_COORDS = false;
	CGMap.MAP_CONTROLS = "size,type";
	CGMap.MAP_DEFAULT_LAT = 51.51004120260676;
	CGMap.MAP_DEFAULT_LNG = -0.0882965087890625;
	CGMap.MAP_DEFAULT_ZOOM = 3;
	
	// Include main google map script
	document.write('<script src="' + CGMap.MAP_SCRIPT_URL + '" type="text/javascript"></script>\r\n');

	CGMap.map = null;

	// Load map
	CGMap.loadMap = function(id, markersURL, controls, lat, lng, zoom) {
		if(window.GBrowserIsCompatible && GBrowserIsCompatible()) {
			CGMap.map = new GMap(document.getElementById(id));
			
			// Get defaults
			if(controls == null)
				controls = CGMap.MAP_CONTROLS;
			if(lat == null || lat == '')
				lat = CGMap.MAP_DEFAULT_LAT;
			if(lng == null || lng == '')
				lng = CGMap.MAP_DEFAULT_LNG;
			if(zoom == null)
				zoom = CGMap.MAP_DEFAULT_ZOOM;

			if(controls.indexOf("size") >= 0)
				CGMap.map.addControl(new GLargeMapControl());
			if(controls.indexOf("type") >= 0)
				CGMap.map.addControl(new GMapTypeControl());
			
			CGMap.map.centerAndZoom(new GLatLng(lat, lng), zoom);
			
			if(CGMap.MAP_SHOW_COORDS && document.getElementById("gmap_message")) {
				GEvent.addListener(map, "click", function(overlay, point) {
				  //var center = map.getCenter();
				  var obj = document.getElementById("gmap_message");
				  if(obj)
					  obj.innerHTML = "(Latitude, Longitude) " + point.toString();
				});
			}
			
			/*
			var baseIcon = new GIcon();
			baseIcon.image = "img/google_maps/red.png";
			baseIcon.shadow = "img/google_maps/shadow.png";
			baseIcon.iconSize = new GSize(12, 20);
			baseIcon.shadowSize = new GSize(22, 20);
			baseIcon.iconAnchor = new GPoint(6, 20);
			baseIcon.infoWindowAnchor = new GPoint(5, 1);
			*/
			
			// Get map locations and put on the map
			if(markersURL != null && markersURL != "") {
				// Creates a marker at the given point with the given number label
				function createMarker(point, info) {
					var marker = new GMarker(point);
					GEvent.addListener(marker, "click", function() {
						marker.openInfoWindowHtml(info);
					});
					return marker;
				}
	
				var request = GXmlHttp.create();
				request.open('GET', markersURL, true);
				request.onreadystatechange = function() {
					if(request.readyState == 4) {
						var xmlDoc = request.responseXML;
						var items = xmlDoc.documentElement.getElementsByTagName("item");
	
						for(var i = 0; i < items.length; i++) {
							var item = items[i];
							var lat = item.getAttribute("lat"); // North-South
							var lng = item.getAttribute("lng"); // East-West
							var info = item.getAttribute("info");
							
							var point = new GLatLng(lat, lng);
							CGMap.map.addOverlay(createMarker(point, info));
						}
					}
				}
				request.send(null);
			}
		}
	};

	// Draggable marker
	CGMap.addDraggable = function(id, controls, lat, lng, zoom, dragEndFunc, clickFunc) {
		CGMap.loadMap(id, null, controls, lat, lng, zoom);
		if(CGMap.map) {
			var marker = new GMarker(new GLatLng(lat, lng), {draggable: true});
			GEvent.addListener(marker, "dragstart", function() {
				CGMap.map.closeInfoWindow();
			});
			if(dragEndFunc != null) {
				GEvent.addListener(marker, "dragend", function() {
					dragEndFunc(marker, CGMap.getMarkerPoint(marker));
				});
			}
			if(clickFunc != null) {
				GEvent.addListener(marker, "click", function() {
					clickFunc(marker, CGMap.getMarkerPoint(marker));
				});
			}
			CGMap.map.addOverlay(marker);
		}
	};
	
	CGMap.getMarkerPoint = function(marker) {
		var point = marker.getPoint();
		return {lat:point.x, lng:point.y};
	};
	
	CGMap.setMarkerInfo = function(marker, info) {
		marker.openInfoWindowHtml(info);
	};
	
	/*

	CGMap.addressToPoint = function(address) {
		if(!CGMap.geoCoder)
			CGMap.geoCoder = new new GClientGeocoder();
		
		CGMap.geoCoder.getLatLng(address, function(point) {
			;				   
		});
	};
		function showAddress(address) {
		  if (geocoder) {
			geocoder.getLatLng(
			  address,
			  function(point) {
				if (!point) {
				  alert(address + " not found");
				} else {
				  map.setCenter(point, 13);
				  var marker = new GMarker(point);
				  map.addOverlay(marker);
				  marker.openInfoWindowHtml(address);
				}
			  }
			);
		  }
		}
	*/