
	
	function loadWorkout(filename)
	{
	
	//GDownloadUrl("./kml/26_09_2008 6_52 am.kml", parseKmlFile);
	GDownloadUrl(filename, createWorkout);
	
	}
	
	

	function createWorkout(data)
	{
		var workout = new Object();
		
		//Parse the kml data
		var xml = GXml.parse(data);

		//Create the workout Summary
		workout.summary = parseSummary(xml.documentElement);

		//Locate the workout events
		var points = parseWorkout(xml.documentElement.getElementsByTagName("eventlocation"));	
		workout.path = new GPolyline(points, "#000000",5, 0.7);
		
		//store the start point
		workout.startPoint = points[1];
		
		//Locate the lap events
		workout.laps = parseLaps(xml.documentElement.getElementsByTagName("lap"));
		
		//create markers
		workout.markers = createMarkers(points);
		
		drawWorkout(workout);
	}
	
	function parseSummary(workout)
	{
		//Iterate through each node in the event
		//and pull out the required data
		var summary = new Object();
		
		for(i = 0;i < workout.childNodes.length;i++)
		{
			switch(workout.childNodes[i].nodeName)
			{
				case "starttime":
				{
				var text = workout.childNodes[i].textContent;
				var strings = text.split(' ');
				summary.date = strings[0];
				summary.startTime = strings[1] + " " + strings[2];
				}
				break;
				
				case "totaltime":
				summary.totalTime = workout.childNodes[i].textContent;
				break;
				
				case "distance":
				summary.distance = workout.childNodes[i].textContent;
				break;
				
				case "speed":
				summary.averageSpeed = workout.childNodes[i].childNodes[0].textContent;
				summary.maxSpeed = workout.childNodes[i].childNodes[1].textContent;
				break;
				
				case "pace":
				summary.averagePace = workout.childNodes[i].childNodes[0].textContent;
				summary.maxPace = workout.childNodes[i].childNodes[1].textContent;
				break;
				
				case "verticalmovement":
				summary.minAltitude = workout.childNodes[i].childNodes[0].textContent;
				summary.maxAltitude = workout.childNodes[i].childNodes[1].textContent;
				break;
				
				case "activity":
				summary.activity = workout.childNodes[i].childNodes[1].textContent;
				break;
				
			}
		}
		
		return summary;
	
	}
	
	function parseWorkout(events)
	{
		var points = [];

		//Iterate through each event
		for(i=0;i<events.length;i++)
		{
			var lat;
			var lng;
			//Only grap every 10th point as too many points will degrade performane
			if(i%10 == 0)
			{
			
				if(events[i].parentNode.tagName != "lap")
				{
					//Iterate through each node in the event
					//and pull out the required data
					for(j = 0;j < events[i].childNodes.length;j++)
					{
						switch(events[i].childNodes[j].nodeName)
						{
							case "latitude":
							lat = events[i].childNodes[j].textContent;
							break;
							
							case "longitude":
							lng = events[i].childNodes[j].textContent;
							break;
							
						}
					}
					
					points.push(new GLatLng(parseFloat(lat),parseFloat(lng)));
				}
			}
			
		}
		
		return points
		
	}
	
	function parseLaps(laps)
	{
		var lapMarkers = [];
	
		// Create lap marker icon
		var tinyIcon = new GIcon();
		tinyIcon.image = "./images/icons/lapmarker.png";
		tinyIcon.iconSize = new GSize(32, 32);
		tinyIcon.iconAnchor = new GPoint(16, 16);	
		
		var lng;
		var lat;
		for(i=0;i<laps.length;i++)
		{
			var lapInfo = new Object();
			//Iterate through each node in the event
			//and pull out the required data
			for(j = 0;j < laps[i].childNodes.length;j++)
			{
				
				switch(laps[i].childNodes[j].nodeName)
				{
					case "laptime":
					lapInfo.lapTime = laps[i].childNodes[j].textContent;
					break;
					
					case "eventlocation":
					{
					var node = laps[i].childNodes[j];
					for(n = 0;n < node.childNodes.length;n++)
						{
							switch(node.childNodes[n].nodeName)
							{
								case "latitude":
								lat = node.childNodes[n].textContent;
								break;
								
								case "longitude":
								lng = node.childNodes[n].textContent;
								break;	

								case "totaldistance":
								lapInfo.totalDistance = node.childNodes[n].textContent;
								break;

								case "totaltime":
								lapInfo.totalTime = node.childNodes[n].textContent;
								break;					
							}
						}
													
					var point = new GLatLng(parseFloat(lat),parseFloat(lng));
					lapInfo.marker = (new GMarker(point, { icon:tinyIcon }));
					break;
					}

				}
			}
			
			lapMarkers.push(lapInfo);
			
		}
		
		return lapMarkers;
	
	}
	
	function createMarkers(points)
	{
	
	var markers = [];
	
	// Create start marker icon
	var startIcon = new GIcon();
	startIcon.iconSize = new GSize(32, 32);
	startIcon.iconAnchor = new GPoint(14, 32);	
	startIcon.image = "./images/icons/start.png";
	
	// Create finish marker icon
	var finishIcon = new GIcon();
	finishIcon.iconSize = new GSize(32, 32);
	finishIcon.iconAnchor = new GPoint(14, 32);	
	finishIcon.image = "./images/icons/finish.png";
                

	markers.push(new GMarker(points[0], { icon:startIcon }));
	markers.push(new GMarker(points[points.length - 1], {icon:finishIcon}));
	
	return markers;


	}
	