/***********************************************************************************
 * Class: CYMap
 * Dependencies: none
 * Description:
 *   Yahoo map class
 *
 ***********************************************************************************/

	// Window class
	function CYMap() {}
	
	// Map ID
	CYMap.MAP_ID = 'wPLidOXV34H8olg7VafTrdFXkORd_rf0NuVYh_.NY1Zh2M_Ys.j0Z7DcRGs1xpBMUsSs';
	CYMap.MAP_VERSION = "3.0";
	CYMap.MAP_SCRIPT_URL = 'http://api.maps.yahoo.com/ajaxymap?v=' + CYMap.MAP_VERSION + '&appid=' + CYMap.MAP_ID;

	CYMap.MAP_CONTROLS = "size,type,pan";
	CYMap.MAP_DEFAULT_LAT = 51.51004120260676;
	CYMap.MAP_DEFAULT_LNG = -0.0882965087890625;
	CYMap.MAP_DEFAULT_ZOOM = 3;
	
	// Include main google map script
	document.write('<script src="' + CYMap.MAP_SCRIPT_URL + '" type="text/javascript"></script>\r\n');

	CYMap.map = null;

	// Load map
	CYMap.loadMap = function(id, markersURL, controls, lat, lng, zoom) {
		CYMap.map = new YMap(document.getElementById(id));
		
		// Get defaults
		if(controls == null)
			controls = CYMap.MAP_CONTROLS;
		if(lat == null || lat == '')
			lat = CYMap.MAP_DEFAULT_LAT;
		if(lng == null || lng == '')
			lng = CYMap.MAP_DEFAULT_LNG;
		if(zoom == null)
			zoom = CYMap.MAP_DEFAULT_ZOOM;

		if(controls.indexOf("size") >= 0)
			CYMap.map.addZoomLong();
		if(controls.indexOf("type") >= 0)
			CYMap.map.addTypeControl();
		if(controls.indexOf("pan") >= 0)
			CYMap.map.addPanControl();
		// Set map type to either of: YAHOO_MAP_SAT YAHOO_MAP_HYB YAHOO_MAP_REG
		if(controls.indexOf("type_sat") >= 0)	
			CYMap.map.setMapType(YAHOO_MAP_SAT);				
		if(controls.indexOf("type_hyb") >= 0)	
			CYMap.map.setMapType(YAHOO_MAP_HYB);				
		
		// Draw map
		CYMap.map.drawZoomAndCenter(new YGeoPoint(lat, lng), zoom);
		
		// Get map locations and put on the map
		if(false && markersURL != null && markersURL != "") {
			/* Rezoom it so that it doesn't try and zoom for all the items */
			YEvent.Capture(CYMap.map, EventsList.onEndGeoRSS, function() {
				CYMap.map.drawZoomAndCenter(new YGeoPoint(lat, lng), zoom);
			});
			
			CYMap.map.addOverlay(new YGeoRSS(markersURL));
		}
		else {
			// Get map locations and put on the map
			if(markersURL != null && markersURL != "") {
				// Creates a marker at the given point with the given info
				CYMap.createMarker = function(point, info) {
					var marker = new YMarker(point);
					YEvent.Capture(marker,EventsList.MouseClick, function() { 
						marker.openSmartWindow(info)
					});
					return marker;
				};
	
				var request = CYMap.createXmlHttp();

				if(request != null) {
					request.open('GET', markersURL, true);
					request.onreadystatechange = function() {
						if(request.readyState == 4) {
							var xmlDoc = request.responseXML;
							
							if(xmlDoc.documentElement) {
								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 YGeoPoint(lat, lng);
									CYMap.map.addOverlay(CYMap.createMarker(point, info));
								}
							}
						}
					}
					request.send(null);
				}
			}
		}
	};

	// Get XML Http object
	CYMap.createXmlHttp = function() {
		var obj = null;
		if(window.XMLHttpRequest)
			obj = new XMLHttpRequest();
		else if(window.ActiveXObject) {
			try { obj = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
				try { obj = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) {
					obj = null;
				}
			}
		}
		return obj;
	};
	
	
