
var map;
var preloadimage = new Image();
var gmarkers = [];
var icons = [];

var icon = new GIcon();
icon.image = "/images/map_markers/default.png";
icon.shadow = "/images/map_markers/shadow.png";

//icon.iconSize = new GSize(29, 37);
//icon.shadowSize = new GSize(42, 33);
//icon.iconAnchor = new GPoint(15, 37);
//icon.infoWindowAnchor = new GPoint(15, 37);

icon.iconSize = new GSize(25, 32);
icon.shadowSize = new GSize(42, 33);
icon.iconAnchor = new GPoint(12, 32);
icon.infoWindowAnchor = new GPoint(10, 15);

function initialiseIcon(countryID, countryName) {
	icons[countryID] = new GIcon(icon);
	icons[countryID].image = "/images/map_markers/" + countryName + "_marker.png";
	preloadimage.src = "/images/map_markers/" + countryName + "_marker_glow.png";
}

function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		
		
		// Limit zoom range
		
		var mapTypes = map.getMapTypes();
		
		for ( var i=0; i < mapTypes.length; i++)
		{
			mapTypes[i].getMinimumResolution = function() { return 2; };
			mapTypes[i].getMaximumResolution = function() { return 11; };
		}
		
		
		// add map controls
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(42.940339,4.658203), 5, G_HYBRID_MAP);
		
		
		fetchRideData();
	}
}

function fetchRideData() {

	var ajax_connection = createRequest();
	
	ajax_connection.open('get', "/rides_xml.php");
	
	ajax_connection.onreadystatechange = function(){
		
		if (ajax_connection.readyState == 4) {
			var xmlDoc = ajax_connection.responseXML;
			
			
			
			var rides = xmlDoc.documentElement.getElementsByTagName("ride");
			var countries = xmlDoc.documentElement.getElementsByTagName("country");
						
			for (var i = 0; i < countries.length; i++) {
				initialiseIcon(countries[i].getAttribute("id"), countries[i].getAttribute("lowername"));
			}
			
			for (var i = 0; i < rides.length; i++) {
				var rideMarker = createMarker(rides[i]);
				map.addOverlay(rideMarker);
			}
			
		}
	}	
	
	ajax_connection.send(null);
}

function createMarker(markerData) {
	
	var point = new GLatLng(parseFloat(markerData.getAttribute("lat")),
	                 parseFloat(markerData.getAttribute("lng")));
	var rideID = markerData.getAttribute("id");
	var countryID = markerData.getAttribute("countryID");
	var countryName = markerData.getAttribute("countryLowerName");
	
	var farMarker = new GMarker(point, icons[countryID]);
	gmarkers[rideID] = farMarker;
	
	var rideInfoHtml = "<div class='infoBox'><img src='" + markerData.getAttribute("imageURL") + "' height='" + markerData.getAttribute("imageHeight") + "' width='" + markerData.getAttribute("imageWidth") + "' class='floater_left_bordered' /><b>" + markerData.getAttribute("rideName") + ", " + markerData.getAttribute("countryName") + "</b><br /><br />" + markerData.getAttribute("shortDesc") + "<br /><br /><a href='" + markerData.getAttribute("rideURL") + "'>Ride Details</a></div>";

	GEvent.addListener(farMarker, "click", function() {
		farMarker.openInfoWindowHtml(rideInfoHtml);
		farMarker.setImage("/images/map_markers/" + countryName + "_marker.png");
	});
	
	GEvent.addListener(farMarker,"mouseover", function() {
		farMarker.setImage("/images/map_markers/" + countryName + "_marker_glow.png");
	});        
	
	GEvent.addListener(farMarker,"mouseout", function() {
		farMarker.setImage("/images/map_markers/" + countryName + "_marker.png");
	});
	
	
	var rideInSidebox = document.getElementById(rideID);
	//rideInSidebox.onclick = function(){ alert(farMarker.lat()); return false;};
	//rideInSidebox.onclick = function(){ map.setCenter(point); return false;};
	rideInSidebox.onclick = function(){ farMarker.openInfoWindowHtml(rideInfoHtml); farMarker.setImage("/images/map_markers/" + countryName + "_marker.png"); return false;};
	//rideInSidebox.onmouseover = function(){ farMarker.mouseover; return false;};
	//rideInSidebox.onmouseout = function(){ farMarker.mouseout; return false;};
		
		
		
	return farMarker;
}

function createRequest() {
	
	// create an Ajax Request
	
	var ajaxRequest;
	
	try
	{
		ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
	}		
		catch (e1)
		{
			try
			{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
				catch (e2)
				{
					ajaxRequest = new XMLHttpRequest();
				}
		}
	
	return ajaxRequest;
}


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addUnLoadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
	  window.onunload = func;
	} else {
	  window.onunload = function() {
	    oldonunload();
	    func();
	  }
	}
}

addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);
