//<![CDATA[

function load()
{	if (GBrowserIsCompatible())
	{	
//********** GLOBAL VARIABLES **********
		var locations;
		var pinBlue;
		var pinAqua;
		var pinYellow;

//********** FUNCTIONS **********
		//custom pins
		function customPins()
		{	//places
			pinBlue = new GIcon();
			pinBlue.image = "supportfiles/pinBlue.png"; 
			pinBlue.shadow = "supportfiles/pinShadow.png"; 
			pinBlue.iconSize = new GSize(18, 29); 
			pinBlue.shadowSize = new GSize(18, 29); 
			pinBlue.iconAnchor = new GPoint(7, 25); 
			pinBlue.infoWindowAnchor = new GPoint(7, 25); 
			//sites
			pinAqua = new GIcon(pinBlue);
			pinAqua.image = "supportfiles/pinAqua.png"; 
			pinYellow = new GIcon(pinBlue);
			pinYellow.image = "supportfiles/pinYellow.png"; 
		}
		
		//Place constructor
		function Place (id, placename, lat, lng, map_size, days, txt1, txt2, sites)
		{	this.id = id;
			this.placename = placename;
			this.lat = lat;
			this.lng = lng;
			this.map_size = map_size;
			this.days = days;
			this.bubble_text = 
				[	new GInfoWindowTab(this.placename, txt1),
					new GInfoWindowTab("Diary Entries", txt2)
				];
			this.pin_type = pinBlue;
			this.pin_roll = pinYellow;
			this.point = new GLatLng(this.lat, this.lng);
			this.pin = new GMarker(this.point, {icon:this.pin_type, title:String(this.placename)});
			this.altpin = new GMarker(this.point, {icon:this.pin_roll, title:String(this.placename)});
			this.sites = sites;
		}

		//Site constructor
		function Site (sitename, sitelat, sitelng, sitebubble)
		{	this.sitename = sitename;
			this.lat = sitelat;
			this.lng = sitelng;
			this.bubble_text = 
				[	new GInfoWindowTab(this.sitename, sitebubble)	];
			this.pin_type = pinAqua;
			this.pin_roll = pinYellow;
			this.point = new GLatLng(this.lat, this.lng);
			this.pin = new GMarker(this.point, {icon:this.pin_type, title:String(this.sitename)});
			this.altpin = new GMarker(this.point, {icon:this.pin_roll, title:String(this.sitename)});
		}
		
		//Day constructor
		function Day (dow, dnum, mth)
		{	this.dow = dow;
			this.dnum = dnum;
			this.mth = mth;
			//months index from 0
			if (this.mth == "July")			{ this.mnum = 6; }
			if (this.mth == "August")		{ this.mnum = 7; }
			if (this.mth == "September")	{ this.mnum = 8; }
			if (this.mth == "October")		{ this.mnum = 9; }
			//current mmdd
			var c = new Date();				c.setMonth(this.mnum, this.dnum);
			var cmth = c.getMonth();
			if (cmth < 9)							{ cmth++;	cmth = String("0" + cmth); }
			else 										{ cmth++;	cmth = String(cmth); }
			var cdate = c.getDate();
			if (cdate < 10)						{ cdate = String("0" + cdate); }
			else 										{ cdate = String(cdate); }
			this.current = cmth + cdate;
			//previous mmdd
			var p = new Date(c.getTime() - 86400000);
			var pmth = p.getMonth();
			if (pmth < 9)							{ pmth++;	pmth = String("0" + pmth); }
			else 										{ pmth++;	pmth = String(pmth); }
			var pdate = p.getDate();
			if (pdate < 10)						{ pdate = String("0" + pdate); }
			else 										{ pdate = String(pdate); }
			this.previous = pmth + pdate;
			//next mmdd
			var n = new Date(c.getTime() + 86400000);
			var nmth = n.getMonth();
			if (nmth < 9)							{ nmth++;	nmth = String("0" + nmth); }
			else 										{ nmth++;	nmth = String(nmth); }
			var ndate = n.getDate();
			if (ndate < 10)						{ ndate = String("0" + ndate); }
			else 										{ ndate = String(ndate); }
			this.next = nmth + ndate;
		}
		
		//create a Place instance and store in loc
		function storeSites (i)
		{	var sites = new Array();
			for (var j = 0; j < locations[i].getElementsByTagName("site").length; j++)
			{	var sitename = GXml.value(locations[i].getElementsByTagName("site")[j].getElementsByTagName("sitename")[0]);
				var sitelat = parseFloat(GXml.value(locations[i].getElementsByTagName("site")[j].getElementsByTagName("sitelat")[0]));
				var sitelng = parseFloat(GXml.value(locations[i].getElementsByTagName("site")[j].getElementsByTagName("sitelng")[0]));
				var sitebubble = GXml.value(locations[i].getElementsByTagName("site")[j].getElementsByTagName("sitebubble")[0]);
				sites[j] = new Site (sitename, sitelat, sitelng, sitebubble);
			}
			return sites;
		}

		//create a Day instance and store in loc
		function storeDays (i)
		{	var days = new Array();
			for (var k = 0; k < locations[i].getElementsByTagName("day").length; k++)
			{	var dow = GXml.value(locations[i].getElementsByTagName("day")[k].getElementsByTagName("dow")[0]);
				var dnum = GXml.value(locations[i].getElementsByTagName("day")[k].getElementsByTagName("dnum")[0]);
				var mth = GXml.value(locations[i].getElementsByTagName("day")[k].getElementsByTagName("mth")[0]);
				days[k] = new Day (dow, dnum, mth);
			}
			return days;
		}

		//create a Place instance and store in loc
		function storePlaces ()
		{	for (var i = 0; i < locations.length; i++)
			{	var id = locations[i].getAttribute("id");
				var placename = GXml.value(locations[i].getElementsByTagName("placename")[0]);
				var lat = parseFloat(GXml.value(locations[i].getElementsByTagName("lat")[0]));
				var lng = parseFloat(GXml.value(locations[i].getElementsByTagName("lng")[0]));
				var map_size = parseInt(GXml.value(locations[i].getElementsByTagName("map_size")[0]));
				var days = storeDays(i);
				var txt1 = GXml.value(locations[i].getElementsByTagName("bubble_text")[0]);
				var txt2 = GXml.value(locations[i].getElementsByTagName("bubble_text")[1]);
				var sites = storeSites(i);
				loc[id] = new Place (id, placename, lat, lng, map_size, days, txt1, txt2, sites);
			}
		}
		
		//set up map
		function setMap (size, place1, place2)
		{	map.addControl(new GMenuMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5,5)));
			map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,75)));
			map.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(5,20)));
			map.addMapType(G_NORMAL_MAP);
			map.addMapType(G_SATELLITE_MAP);
			map.addMapType(G_HYBRID_MAP);
			map.addMapType(G_PHYSICAL_MAP);
			map.enableScrollWheelZoom();
			var centre_lat = (place1.lat + place2.lat)/2;
			var centre_lng = (place1.lng + place2.lng)/2;
			if (show != "all")
			{	if (loc[show].days[d].current == "1015")
				{	centre_lng = -150;
				}
			}
			var centre_pt = new GLatLng(centre_lat, centre_lng);
			if ((place1.placename == "Dubai") || (place1.placename == "Cairo"))
			{	if (place1.placename != place2.placename)
				{	map.setCenter(centre_pt, size, G_NORMAL_MAP);
				} else
				{	map.setCenter(centre_pt, size, G_SATELLITE_MAP);
				}
			} else
			{	map.setCenter(centre_pt, size, G_NORMAL_MAP);
			}
		}
		
		//set a marker
		function setMarker (marker)
		{	map.addOverlay(marker.pin);
			GEvent.addListener(marker.pin, "mouseover", function() {map.removeOverlay(marker.pin); map.addOverlay(marker.altpin); } );
			GEvent.addListener(marker.altpin, "mouseout", function() {map.removeOverlay(marker.altpin); map.addOverlay(marker.pin); } );
			GEvent.addListener(marker.pin, "click", function() {marker.pin.openInfoWindowTabsHtml(marker.bubble_text); } );
			GEvent.addListener(marker.altpin, "click", function() {marker.pin.openInfoWindowTabsHtml(marker.bubble_text); } );
		}

		function setContents ()
		{	var htmlstring = "";
			var newhtml = "";
			var place1id = "wgtn";
			var place1name = "Wellington";
			// set first contents heading
			htmlstring = "<tr><td colspan=\"2\"><h2><a href=\"javascript:placeCentre('dubai', '3')\" class=\"place\">Middle East</a></h2></td></tr>";
			// step thru list of places
			for (var y in loc)
			{	// step thru each day listed for a place
				for (var c = 0; c < (loc[y].days.length); c++)
				{	// first day in a place
					if (c == 0)
					{	if (loc[y].id == "wgtn")
						{	newhtml = 
									"<tr>" + 
									"<td class=\"nw\"><a href=\"" + loc[y].days[c].current + ".php\" class=\"date\">" + loc[y].days[c].dow.substr(0, 3) + " " + loc[y].days[c].dnum + " " + loc[y].days[c].mth.substr(0, 3) + "</a></td>" + 
									"<td><a href=\"javascript:placeZoom('" + place1id + "')\" onmouseover=\"placeOver('" + place1id + "')\" onmouseout=\"placeOut('" + place1id + "')\" class=\"place\">" + place1name + "</a>" + 
									" to <a href=\"javascript:placeZoom('dubai')\" onmouseover=\"placeOver('dubai')\" onmouseout=\"placeOut('dubai')\" class=\"place\">Dubai</a>";
						} else if (loc[y].id == "dubai")
						{	newhtml = 
									"<tr>" + 
									"<td class=\"nw\"><a href=\"" + loc[y].days[c].current + ".php\" class=\"date\">" + loc[y].days[c].dow.substr(0, 3) + " " + loc[y].days[c].dnum + " " + loc[y].days[c].mth.substr(0, 3) + "</a></td>" + 
									"<td><a href=\"javascript:placeZoom('dubai')\" onmouseover=\"placeOver('dubai')\" onmouseout=\"placeOut('dubai')\" class=\"place\">Dubai</a>";
						} else
						{	newhtml = 
									"<tr>" + 
									"<td class=\"nw\"><a href=\"" + loc[y].days[c].current + ".php\" class=\"date\">" + loc[y].days[c].dow.substr(0, 3) + " " + loc[y].days[c].dnum + " " + loc[y].days[c].mth.substr(0, 3) + "</a></td>" + 
									"<td><a href=\"javascript:placeZoom('" + place1id + "')\" onmouseover=\"placeOver('" + place1id + "')\" onmouseout=\"placeOut('" + place1id + "')\" class=\"place\">" + place1name + "</a>" + 
									" to <a href=\"javascript:placeZoom('" + loc[y].id + "')\" onmouseover=\"placeOver('" + loc[y].id + "')\" onmouseout=\"placeOut('" + loc[y].id + "')\" class=\"place\">" + loc[y].placename + "</a>";
						}
					}
					// last day in a place
					else if (c == loc[y].days.length - 1)
					{	place1id = loc[y].id;
						place1name = loc[y].placename;
						if (loc[y].id == "sf")
						{	newhtml = 
								"<td class=\"nw\"><a href=\"" + loc[y].days[c].current + ".php\" class=\"date\">" + loc[y].days[c].dow.substr(0, 3) + " " + loc[y].days[c].dnum + " " + loc[y].days[c].mth.substr(0, 3) + "</a></td>" + 
								"<td><a href=\"javascript:placeZoom('" + place1id + "')\" onmouseover=\"placeOver('" + place1id + "')\" onmouseout=\"placeOut('" + place1id + "')\" class=\"place\">" + place1name + "</a>" + 
								" to <a href=\"javascript:placeZoom('wgtn')\" onmouseover=\"placeOver('wgtn')\" onmouseout=\"placeOut('wgtn')\" class=\"place\">Wellington</a>";
						}
						if (loc[y].days[c].current == "0806")
						{	htmlstring += newhtml;
							newhtml = "<tr><td colspan=\"2\"><h2><a href=\"javascript:placeCentre('man', '5')\" class=\"place\">UK</a></h2></td></tr>";
						}
						if (loc[y].days[c].current == "0819")
						{	htmlstring += newhtml;
							newhtml = "<tr><td colspan=\"2\"><h2><a href=\"javascript:placeCentre('stir', '7')\" class=\"place\">Scotland</a></h2></td></tr>";
						}
						if (loc[y].days[c].current == "0908")
						{	htmlstring += newhtml;
							newhtml = "<tr><td colspan=\"2\"><h2><a href=\"javascript:placeCentre('ch', '6')\" class=\"place\">England</a></h2></td></tr>";
						}
						if (loc[y].days[c].current == "1004")
						{	htmlstring += newhtml;
							newhtml = "<tr><td colspan=\"2\"><h2><a href=\"javascript:placeCentre('dall', '3')\" class=\"place\">USA</a></h2></td></tr>";
						}
					}
					// all other days
					else
					{	newhtml = 
								"<tr>" + 
								"<td class=\"nw\"><a href=\"" + loc[y].days[c].current + ".php\" class=\"date\">" + loc[y].days[c].dow.substr(0, 3) + " " + loc[y].days[c].dnum + " " + loc[y].days[c].mth.substr(0, 3) + "</a></td>" + 
								"<td><a href=\"javascript:placeZoom('" + loc[y].id + "')\" onmouseover=\"placeOver('" + loc[y].id + "')\" onmouseout=\"placeOut('" + loc[y].id + "')\" class=\"place\">" + loc[y].placename + "</a>";
					}
					htmlstring += newhtml;
					newhtml = "</td></tr><tr>";
					htmlstring += newhtml;
					newhtml = "";
				}
			}
			newhtml = "</tr>";
			htmlstring += newhtml;
			return htmlstring;
		}
		
		//set previous, contents, next links
		function setLinks (pos)
		{	if (loc[show].days[d].current != "0729")
			{	document.getElementById("previous" + pos).innerHTML="Previous";
				document.getElementById("previous" + pos).href = loc[show].days[d].previous + ".php";
			}
			document.getElementById("index" + pos).innerHTML="Contents";
			document.getElementById("index" + pos).href = "index.html";
			if (loc[show].days[d].current != "1015")
			{	document.getElementById("next" + pos).innerHTML="Next";
				document.getElementById("next" + pos).href = loc[show].days[d].next + ".php";
			}
		}


//********** MAIN PROGRAM **********
		//create custom pins
		customPins();

		//extract place data from the xml file
		var get_places = GXmlHttp.create();
		get_places.open("GET", "supportfiles/places.xml", true);
		//wait for parsing to complete, 4 means data successfully parsed
		get_places.onreadystatechange = function() 
		{	//everything must happen inside this IF
			if (get_places.readyState == 4)
			{	var places = get_places.responseXML;
				//data arrives as an array
				locations = places.documentElement.getElementsByTagName("place");
				//extract data and store in an array of classes
				storePlaces ();
				//create map
				map = new GMap2(document.getElementById("map"));
				//set map
				if (show == "all")	//have index page
				{	setMap (1, loc["wgtn"], loc["sf"]);
					//set place markers
					for (var x in loc)
					{	setMarker(loc[x]);
					}
					//create dynamic contents
					document.getElementById("contents").innerHTML = setContents ();
				}
				else if (show == to)	//have a 'static' page
				{	setMap (loc[show].map_size, loc[show], loc[show]);
					//set site markers
					for (var i = 0; i < loc[show].sites.length; i++)
					{	setMarker(loc[show].sites[i]);
					}
					//set place marker
					setMarker(loc[show]);
					//set site markers
					for (var i = 0; i < loc[show].sites.length; i++)
					{	setMarker(loc[show].sites[i]);
					}
					//create dynamic page bits
					document.getElementById("heading").innerHTML = 
							loc[show].days[d].dow + " " + loc[show].days[d].dnum + " " + loc[show].days[d].mth + 
							"&#151; <a href=\"javascript:placeBubble(show)\" onmouseover=\"placeOver(show)\" onmouseout=\"placeOut(show)\" class=\"place\">" + loc[show].placename + "</a>";
					setLinks ("T");
					setLinks ("B");
				}
				else	//have a 'travel' page
				{	var bounds = new GLatLngBounds;
					bounds.extend(loc[show].point);
					bounds.extend(loc[to].point);
					var size = map.getBoundsZoomLevel(bounds) - 1;
					setMap (size, loc[show], loc[to]);
					//set place markers
					setMarker(loc[to]);
					setMarker(loc[show]);
					//set site markers
					for (var i = 0; i < loc[show].sites.length; i++)
					{	setMarker(loc[show].sites[i]);
					}
					//create dynamic page bits
					document.getElementById("heading").innerHTML = 
							loc[show].days[d].dow + " " + loc[show].days[d].dnum + " " + loc[show].days[d].mth + 
							"&#151; <a href=\"javascript:placeBubble(show)\" onmouseover=\"placeOver(show)\" onmouseout=\"placeOut(show)\" class=\"place\">" + loc[show].placename + 
							"</a> to <a href=\"javascript:placeBubble(to)\" onmouseover=\"placeOver(to)\" onmouseout=\"placeOut(to)\" class=\"place\">" + loc[to].placename + "</a>";
					setLinks ("T");
					setLinks ("B");
				}
			}
		}
		get_places.send(null);
	}
	else
		alert("Sorry, the Google Maps API is not compatible with this browser");
}
//]]>
