	// Store any previous onload functions before overwriting
	var strOldOnLoad = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = _boiseMap();
	} else {
		window.onload = function() {strOldOnLoad();	_boiseMap();}
	}

	var map
	// declare arrays for points
	var points = new Array();
	var markers  = new Array ();
	var currMarker

function _boiseMap() {
	if (GBrowserIsCompatible()) {
		
		// create map
		map = new GMap(document.getElementById("map"));
		map.addControl(new GSmallZoomControl());
//		map.addControl(new GSmallMapControl());
//		map.addControl(new GMapTypeControl());
		map.centerAndZoom(new GPoint(-116.28, 43.620), 7);


		var request = GXmlHttp.create();
		request.open('GET', 'overview.xml', true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				
				var objLegend = document.createElement('div');
				objLegend.setAttribute('id','newLegend');
				var objLegendP = document.createElement('p');
				objLegend.appendChild(objLegendP)

				var xmlDoc = request.responseXML;
				var xmlCounties = xmlDoc.documentElement.getElementsByTagName('county');

				for (var i = 0; i < xmlCounties.length; i++) {
					if (i > 0) {
						// add a line break for each new county (after the first)
						objLegendP.appendChild(document.createElement('br'));
					}
					objCounty = document.createElement('strong');
					objCounty.appendChild(document.createTextNode(xmlCounties[i].getAttribute('label') + ' County: '));
					objLegendP.appendChild(objCounty);
					
					var xmlCities = xmlCounties[i].getElementsByTagName('city');
					for (var j = 0; j < xmlCities.length; j++) {
						if (j > 0) {
							objLegendP.appendChild(document.createTextNode(', '));
						}
						strCityName = xmlCities[j].getAttribute('label') + ''
						objCity = document.createElement('a')
						objCity.setAttribute('href',"javascript:focusOnMarker('" + strCityName + "')");
						objCity.appendChild(document.createTextNode(strCityName))
						
						objLegendP.appendChild(objCity);
					}
				}
				document.getElementById('map').parentNode.insertBefore(objLegend, document.getElementById('map'))
				
//				document.getElementById('mapWrap2').appendChild(objLegend)

				var xmlCities = xmlDoc.documentElement.getElementsByTagName("city");
				var label // holds the label (city/town name)
				for (var i = 0; i < xmlCities.length; i++) {
					label = xmlCities[i].getAttribute("label");
				  	points[label] = new GPoint(parseFloat(xmlCities[i].getAttribute("lng")),
										   parseFloat(xmlCities[i].getAttribute("lat")));
				  	markers[label] = createMarkerWithListener(points[label], label);
				  	map.addOverlay(markers[label]);
				}

				focusOnMarker(xmlCities[0].getAttribute("label"));
			}
		}
		request.send(null);
	}
}


function createMarkerWithListener(point, label) {
	var marker = new GMarker(point);
	var cityName = label
	GEvent.addListener(marker, 'click', function() {focusOnMarker(cityName);});
	
	return marker
}


function focusOnMarker(label) {
	if (currMarker == label) {
		// hide info Window this provides feedback when it's opened again below
		// and also forces the map to pan so as to show the infoWindow
		map.closeInfoWindow();
	}
	// show the marker (clone the summary paragraph used in the page for the info window)
	markers[label].openInfoWindow(document.getElementById(label.toLowerCase() + 'Summary').cloneNode(true));
	currMarker = label;
}

function lowerCase(mixedCaseString) {
	alert(mixedCaseString + ', ' + mixedCaseString.toLowerCase);
	return mixedCaseString.toLowerCase;
}
