function load_js(jsfiles) {
	// code taken from http://www.openlayers.org/api/OpenLayers.js
	// apparently two methods need to be supported...
	var agent = navigator.userAgent;
	var docWrite = (agent.match("MSIE") || agent.match("Safari"));

	if (docWrite) {
		var allScriptTags = new Array(jsfiles.length);
	}
	for (var i = 0; i < jsfiles.length; i++) {
		if (docWrite) {
			allScriptTags[i] = "<script src='" + jsfiles[i] + "' type='text/javascript'></script>";
		} else {
			var s = document.createElement("script");
			s.src = jsfiles[i];
			s.type = 'text/javascript';
			var h = document.getElementsByTagName("head")[0];
			h.appendChild(s);
		}
	}
	if (docWrite) {
		document.write(allScriptTags.join(""));
	}
}

var maptype = 'o'	// default
var gloaded = false;

function guess_maptype() {
	var cookies = document.cookie.split(';');
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for (i = 0; i < cookies.length; i++) {
		var nameval = cookies[i].split('=');

		if (nameval[0].match('^\s*vandry_maptype\s*$')) {
			if (nameval.length > 1) {
				if (nameval[1].match('g')) {
					maptype = 'g';
				} else if (nameval[1].match('o')) {
					maptype = 'o';
				}
			}
			return maptype;
		}
	}
	return maptype;
}

function initmap() {
	guess_maptype();
	return;	// this does not work
	if (maptype == 'g') {
		load_js([
			'http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAkf9KUyLLYmfPBXLQS1kdvBR84yWvotQhYy7py7OQBKrJPbOaYhQNUHWvSa2dtWJ0zRBzq9xwfj1Z5g'
		]);
	} else if (maptype == 'o') {
		load_js([
			'http://www.openlayers.org/api/OpenLayers.js',
			'http://www.openstreetmap.org/openlayers/OpenStreetMap.js'
		]);
	}
}

function add_key_img(key, src) {
	var e = document.getElementById(key);
	if (e) {
		e.innerHTML = "<img border='0' src='" + src + "' />";
	}
}

function map_with_markers(el, el2, lat, long, zoom, markers, lines) {
	if (maptype == 'g') {
		if (el2) {
			var e = document.getElementById(el2);
			e.innerHTML = '<small>Map: <a href="javascript:set_osm()">Openstreetmap</a> | <b>Google</b></small>';
		}
		if (GBrowserIsCompatible()) {
			var map = new GMap2(document.getElementById(el));
			gloaded = true;
			map.setCenter(new GLatLng(lat, long), zoom);
			for (var i = 0; i < markers.length; i++) {
				var mlat = markers[i][0];
				var mlong = markers[i][1];
				var icname = markers[i][2];
				var keyid = markers[i][3];
				var keyicon = markers[i][4];

				var theicon = new GIcon(G_DEFAULT_ICON);
				theicon.image = "http://maps.google.com/intl/en_ALL/mapfiles/" + icname;
				var m = new GMarker(new GLatLng(mlat, mlong), { icon: theicon });
				map.addOverlay(m);

				if (keyid) {
					add_key_img(keyid, "http://maps.google.com/intl/en_ALL/mapfiles/" + keyicon);
				}
			}
			for (var i = 0; i < lines.length; i++) {
				var colour = lines[i][0];
				var weight = lines[i][1];
				var points = lines[i][2];
				var levels = lines[i][3];
				var numLevels = lines[i][4];

				var p = new GPolyline.fromEncoded({
					color: colour,
					weight: weight,
					points: points,
					levels: levels,
					zoomFactor: 32,
					numLevels: numLevels
				});
				map.addOverlay(p);
			}
			map.addControl(new GSmallMapControl);
			return map;
		} else {
			return null;
		}
	} else if (maptype == 'o') {
		var map = new OpenLayers.Map(el, {
			maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
			numZoomLevels: 19,
			maxResolution: 156543.0399,
			units: 'm',
			projection: new OpenLayers.Projection("EPSG:900913"),
			displayProjection: new OpenLayers.Projection("EPSG:4326")
		});

		var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik (updated weekly)");

		var layerTah = new OpenLayers.Layer.OSM.Osmarender("Tiles@Home");

		map.addLayers([layerMapnik,layerTah]);

		if (markers.length > 0) {
			var mlayer = new OpenLayers.Layer.Markers("points");
			map.addLayer(mlayer);
			
			for (var i = 0; i < markers.length; i++) {
				var mlat = markers[i][0];
				var mlong = markers[i][1];
				var icname = markers[i][2];
				var keyid = markers[i][3];
				var keyicon = markers[i][4];

				var size = new OpenLayers.Size(20,34);
				var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
				var icon = new OpenLayers.Icon('http://www.TZoNE.ORG/~vandry/Nepal-2008/markers/' + icname, size, offset);
				var point = new OpenLayers.LonLat(mlong, mlat).transform(map.displayProjection, map.projection);
				mlayer.addMarker(new OpenLayers.Marker(point, icon));

				if (keyid) {
					add_key_img(keyid, "markers/" + icname);
				}
			}
		}
		if (lines.length > 0) {
			var symbolizer = OpenLayers.Util.applyDefaults({
				strokeOpacity: 1, strokeColor: "${colour}", strokeWidth: "${width}"
			}, OpenLayers.Feature.Vector.style["default"]);
			var styleMap = new OpenLayers.StyleMap({ 'default': symbolizer });
			var tlayer = new OpenLayers.Layer.PointTrack("tracks", {'styleMap': styleMap});
			map.addLayer(tlayer);
			var nfeatures = 0;

			for (var i = 0; i < lines.length; i++) {
				var colour = lines[i][0];
				var weight = lines[i][1];
				var points = lines[i][5];

				var nodes = [ ];
				for (var j = 0; j < points.length; j++) {
					var point = new OpenLayers.LonLat(points[j][1], points[j][0]).transform(map.displayProjection, map.projection);
					var feat = new OpenLayers.Feature(tlayer, point);
					nodes.push(feat);
				}
				tlayer.addNodes(nodes);
				while (nfeatures < tlayer.features.length) {
					tlayer.features[nfeatures].attributes.colour = colour;
					tlayer.features[nfeatures].attributes.width = weight;
					nfeatures++;
				}
			}
		}

		map.addControl(new OpenLayers.Control.LayerSwitcher());

		var lonLat = new OpenLayers.LonLat(long, lat).transform(map.displayProjection, map.projection);
		map.setCenter(lonLat, zoom);

		if (el2) {
			var e = document.getElementById(el2);
			e.innerHTML = '<small>Map: <b>Openstreetmap</b> | <a href="javascript:set_google()">Google</a>';
		}
	}
}

function maybe_GUnload() {
	if (gloaded) {
		GUnload();
	}
	gloaded = false;
}

function set_osm() {
	set_map('o');
	maybe_GUnload();
	load();
}

function set_google() {
	set_map('g');
	load();
}

function set_map(type) {
	var expires = new Date();
	expires.setTime(expires.getTime() + 15552000000);

	document.cookie = "vandry_maptype=" + type +
		";expires=" + expires.toGMTString() +
		";path=/~vandry/;domain;domain=www.TZoNE.ORG";

	maptype = type;
}
