
function XML_load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(0, 0), 1);

	// Add a new row to the table...
	function insertRow(number,id,lat,lng,state,device,contact,start,end,comments) {
		var tnumber      = document.createElement('td');
		var tid          = document.createElement('td');
		var tcoordinates = document.createElement('td');
		var tstate       = document.createElement('td');
		var tdevice      = document.createElement('td');
		var tcontact     = document.createElement('td');
		var tperiod      = document.createElement('td');
		var tcomments    = document.createElement('td');

		tnumber.appendChild(     document.createTextNode(number                     ));
		tid.appendChild(         document.createTextNode(id                         ));
		tcoordinates.appendChild(document.createTextNode("("+lat+"º φ, "+lng+"º λ)" ));
		tstate.appendChild(      document.createTextNode(state                      ));
		tdevice.appendChild(     document.createTextNode(device                     ));
		tcontact.appendChild(    document.createTextNode(contact                    ));
		tperiod.appendChild(     document.createTextNode(start + " ... " + end      ));
		tcomments.appendChild(   document.createTextNode(comments                   ));

		var newRow = document.createElement('tr');
		newRow.appendChild(tnumber);
		newRow.appendChild(tid);
		newRow.appendChild(tcoordinates);
		newRow.appendChild(tstate);
		newRow.appendChild(tdevice);
		newRow.appendChild(tcontact);
		newRow.appendChild(tperiod);
		newRow.appendChild(tcomments);

		var table = document.getElementById("table");
		table.tBodies[0].appendChild(newRow);
	}

	// Create our "tiny" marker icon
	var icon = new GIcon();
	icon.image = "mm_20_red.png";
	icon.shadow = "mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

	// Creates a marker at the given point with the given number label
	var vbounds = null;
	function createMarker(number,id,lat,lng,state,device,contact,start,end,comments) {
		
		var point  = new GLatLng(lat,lng);

		if (vbounds==null)
		{vbounds = new GLatLngBounds(point,point);}
		else
		{vbounds.extend(point);}

		var marker = new GMarker(point,icon);
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(
				"Latitude: <b>" + lat + "</b>"
				+"<br/>"+
				"Longitude: <b>" + lng + "</b>"
				+"<br/>"+
				"State: <b>" + state + "</b>"
				+"<br/>"+
				"Number: <b>" + number + "</b>"
				+"<br/>"+
				"Identifier: <b>" + id + "</b>"
				+"<br/>"+
				"Device: <b>" + device + "</b>"
				+"<br/>"+
				"Contact: <b>" + contact + "</b>"
				+"<br/>"+
				"Start: <b>" + start + "</b>"
				+"<br/>"+
				"End: <b>" + end + "</b>"
				+"<br/>"+
				"Comments: <b>" + comments + "</b>"
				);
		});

		insertRow(number,id,lat,lng,state,device,contact,start,end,comments);

		return marker;
	}

	// The format expected is:
	// <markers>
	//   <marker lat="+40.364" lng="-74.656" id="1-ETH"  type="MINDSONG"
	//           host="Roger Nelson" start="1998-08-02" end=""
	//	     comments="was PEAR type up to 2001-08-10"
	//	     state="Princeton, NJ, USA"
	//   />
	//   <marker lat="+47.079" lng="+07.062" id="37-ETH" type="PEAR"
	//           host="John Walker"  start="1998-08-02" end=""
	//	     comments=""
	//	     state="Neuchâtel, Switzerland"
	//   />
	// </markers>
	function processMarkers(data, responseCode) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
			var number   = parseInt(markers[i].getAttribute("number"));
			var id       = markers[i].getAttribute("id");
			var lat      = parseFloat(markers[i].getAttribute("lat"));
			var lng      = parseFloat(markers[i].getAttribute("lng"));
			var state    = markers[i].getAttribute("state");
			var device   = markers[i].getAttribute("device");
			var contact  = markers[i].getAttribute("contact");
			var date     = markers[i].getAttribute("date");
			var start    = markers[i].getAttribute("start");
			var end      = markers[i].getAttribute("end");
			var comments = markers[i].getAttribute("comments");
			
			var marker = createMarker(number,id,lat,lng,state,device,contact,start,end,comments);
			map.addOverlay(marker);
		};

		// Autoadjust to current markers
		map.setCenter(vbounds.getCenter(), map.getBoundsZoomLevel(vbounds));
		ts_resortTable(document.getElementById("table").tHead.rows[0].cells[0].childNodes[0],0);
	};

	// Download the data in data.xml and load it on the map.
	GDownloadUrl("data.xml", processMarkers);
      };
    }

