var customIcons = [];
var map;
var infoWindow;
var shadow;

function load() {
	shadow = new google.maps.MarkerImage("http://maps.gstatic.com/intl/en_us/mapfiles/shadow50.png",
		null, null, new google.maps.Point(10, 35));
	map = new google.maps.Map(document.getElementById("map"), {
		center: new google.maps.LatLng(20, 15),
		zoom: 2,
		mapTypeId: 'roadmap'
	});
	infoWindow = new google.maps.InfoWindow;

	downloadUrl("coord.xml", function(data) {
		var xml = data.responseXML;
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
			var nick = markers[i].getAttribute("nick");
			var client = markers[i].getAttribute("client");
			var hubs = markers[i].getAttribute("hubs");
			var leaves = markers[i].getAttribute("leaves");
			var body = nick + "<br>" + client + "<br>" +
				"Hubs: " + hubs + " Leaves: " + leaves;
			var country = markers[i].getAttribute("country");
			var point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
									parseFloat(markers[i].getAttribute("lng")));
			var location = country + " | " + point.lat() + ", " + point.lng();
			var marker = createMarker(point, body, location, country);
		}
	});

	downloadUrl("links.xml", function(data) {
		var xml = data.responseXML;
		var lines = xml.documentElement.getElementsByTagName("line");
		// read each line
		for (var a = 0; a < lines.length; a++) {
			// get any line attributes
			var colour = lines[a].getAttribute("colour");
			var width  = parseFloat(lines[a].getAttribute("width"));
			// read each point on that line
			var points = lines[a].getElementsByTagName("point");
			var pts = [];
			for (var i = 0; i < points.length; i++) {
			   pts[i] = new google.maps.LatLng(parseFloat(points[i].getAttribute("lat")),
								   parseFloat(points[i].getAttribute("lng")));
			}
			var polyline = new google.maps.Polyline({
				path: pts,
				strokeColor: colour,
				strokeOpacity: 0.5,
				strokeWeight: width});
			polyline.setMap(map);
		}
	});
}

function createMarker(point, body, location, country) {
	var marker = new google.maps.Marker({
		map: map,
		position: point,
		icon: "img/markerflags/" + country.toLowerCase() + ".png",
		shadow: shadow
	});
	var html = "<b>" + body + "<" + "/b> <br/>" + location;
	bindInfoWindow(marker, map, infoWindow, html);
	return marker;
}

function bindInfoWindow(marker, map, infoWindow, html) {
	google.maps.event.addListener(marker, 'click', function() {
		infoWindow.setContent(html);
		infoWindow.open(map, marker);
	});
}

function downloadUrl(url, callback) {
  var request = window.ActiveXObject ?
	  new ActiveXObject('Microsoft.XMLHTTP') :
	  new XMLHttpRequest;

  request.onreadystatechange = function() {
	if (request.readyState == 4) {
	  request.onreadystatechange = doNothing;
	  callback(request, request.status);
	}
  };

  request.open('GET', url, true);
  request.send(null);
}

function doNothing() {}


