    //<![CDATA[
        
	var latitude = 0;
	var longitude = 0;
	var zoom = 0;

    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
	map.enableScrollWheelZoom();
    geocoder = new GClientGeocoder();


	GEvent.addListener(map, "moveend", function() {
    var center = map.getCenter();
	});


	function recenter(latitude, longitude, zoom) {
	    map.setCenter(new GLatLng(latitude, longitude), zoom);
	}


    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 7);
//              var marker = new GMarker(point);
//              map.addOverlay(marker);
//              marker.openInfoWindowHtml(address);
            }
          }
        );
      }
    }


    function resetMapPosition() {
	switch(uriq) {
	case "region=na":
	    map.setCenter(new GLatLng(36.456636,-104.941406), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in North America</a>';
		document.title = "TRImapper.com - North America Ironman 70.3 Races, 70.3 Races in North America";
		break;
	case "region=as":
	    map.setCenter(new GLatLng(22.593726,97.382812), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in Asia</a>';
		document.title = "TRImapper.com - Asia Ironman 70.3 Races, 70.3 Races in Asia";
		break;
	case "region=af":
	    map.setCenter(new GLatLng(0.537868,15.962891), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in Africa</a>';
		document.title = "TRImapper.com - Africa Ironman 70.3 Races, 70.3 Races in Africa";
		break
	case "region=ca":
	    map.setCenter(new GLatLng(13.282718,-82.265625), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in Central America</a>';
		document.title = "TRImapper.com - Central America Ironman 70.3 Races, 70.3 Races in Central America";
		break;
	case "region=cb":
	    map.setCenter(new GLatLng(18.479609,-71.806640), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in the Caribbean</a>';
		document.title = "TRImapper.com - Caribbean Ironman 70.3 Races, 70.3 Races in the Caribbean";
		break;
	case "region=au":
	    map.setCenter(new GLatLng(-25.482951,154.863281), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in Oceania</a>';
		document.title = "TRImapper.com - Oceania Ironman 70.3 Races, 70.3 Races in Oceania";
		break;
	case "region=eu":
	    map.setCenter(new GLatLng(50.792047,10.634765), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in Europe</a>';
		document.title = "TRImapper.com - Europe Ironman 70.3 Races, 70.3 Races in Europe";
		break;
	case "region=sa":
	    map.setCenter(new GLatLng(-25.005972,-56.562891), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in South America</a>';
		document.title = "TRImapper.com - South America Ironman 70.3 Races, 70.3 Races in South America";
		break;
	case "cntry=ca":
	    map.setCenter(new GLatLng(51.618016,-93.867187), 3);
		pagelink = '<a href="'+document.URL+'">Triathlons in Canada</a>';
		document.title = "TRImapper.com - Canada Ironman 70.3 Races, 70.3 Races in Canada";
		break;
	case "cntry=as":
	    map.setCenter(new GLatLng(-27.683528,134.121093), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in Australia</a>';
		document.title = "TRImapper.com - Australia Ironman 70.3 Races, 70.3 Races in Australia";
		break;
	case "cntry=be":
	    map.setCenter(new GLatLng(50.687758,4.229736), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Belgium</a>';
		document.title = "TRImapper.com - Belgium Ironman 70.3 Races, 70.3 Races in Belgium";
		break;
	case "cntry=ch":
	    map.setCenter(new GLatLng(34.307143,103.623046), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in China</a>';
		document.title = "TRImapper.com - China Ironman 70.3 Races, 70.3 Races in China";
		break;
	case "cntry=ci":
	    map.setCenter(new GLatLng(-35.817813,-70.400390), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in Chile</a>';
		document.title = "TRImapper.com - Chile Ironman 70.3 Races, 70.3 Races in Chile";
		break;
	case "cntry=mn":
	    map.setCenter(new GLatLng(43.728436,7.419891), 9);
		pagelink = '<a href="'+document.URL+'">Triathlons in Monaco</a>';
		document.title = "TRImapper.com - Monaco Ironman 70.3 Races, 70.3 Races in Monaco";
		break;
	case "cntry=mx":
	    map.setCenter(new GLatLng(23.966175,-101.557617), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in Mexico</a>';
		document.title = "TRImapper.com - Mexico Ironman 70.3 Races, 70.3 Races in Mexico";
		break;
	case "cntry=sf":
	    map.setCenter(new GLatLng(-28.343064,25.268554), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in South Africa</a>';
		document.title = "TRImapper.com - South Africa Ironman 70.3 Races, 70.3 Races in South Africa";
		break;
	case "cntry=us":
	    map.setCenter(new GLatLng(37.160317,-95.976562), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in United States</a>';
		document.title = "TRImapper.com - United States Ironman 70.3 Races, 70.3 Races in United States";
		break;
	case "cntry=usvi":
	    map.setCenter(new GLatLng(18.067534,-64.822082), 9);
		pagelink = '<a href="'+document.URL+'">Triathlons in United States Virgin Islands</a>';
		document.title = "TRImapper.com - United States Virgin Islands (U.S.V.I.) Ironman 70.3 Races, 70.3 Races in the United States Virgin Islands (U.S.V.I.)";
		break;
	case "state=ca":
	    map.setCenter(new GLatLng(36.792988,-119.763404), 6);
		pagelink = '<a href="'+document.URL+'">Triathlons in California</a>';
		document.title = "TRImapper.com - California Ironman 70.3 Races, 70.3 Races in California";
		break;
	case "state=fl":
	    map.setCenter(new GLatLng(28.149503,-84.221191), 6);
		pagelink = '<a href="'+document.URL+'">Triathlons in Florida</a>';
		document.title = "TRImapper.com - Florida Ironman 70.3 Races, 70.3 Races in Florida";
		break;
	case "state=ga":
	    map.setCenter(new GLatLng(32.837452,-83.637898), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Georgia</a>';
		document.title = "TRImapper.com - Georgia Ironman 70.3 Races, 70.3 Races in Georgia";
		break;
	case "state=id":
	    map.setCenter(new GLatLng(44.504722,-114.230833), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Idaho</a>';
		document.title = "TRImapper.com - Idaho Ironman 70.3 Races, 70.3 Races in Idaho";
		break;
	case "state=ks":
	    map.setCenter(new GLatLng(38.349457,-98.31239), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Kansas</a>';
		document.title = "TRImapper.com - Kansas Ironman 70.3 Races, 70.3 Races in Kansas";
		break;
	case "state=la":
	    map.setCenter(new GLatLng(31.043521,-92.175292), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Louisiana</a>';
		document.title = "TRImapper.com - Louisiana Ironman 70.3 Races, 70.3 Races in Louisiana";
		break;
	case "state=md":
	    map.setCenter(new GLatLng(39.084842,-77.162498), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Maryland</a>';
		document.title = "TRImapper.com - Maryland Ironman 70.3 Races, 70.3 Races in Maryland";
		break;
	case "state=mi":
	    map.setCenter(new GLatLng(43.711554,-85.415967), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Michigan</a>';
		document.title = "TRImapper.com - Michigan Ironman 70.3 Races, 70.3 Races in Michigan";
		break;
	case "state=nh":
	    map.setCenter(new GLatLng(43.767344,-71.716137), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in New Hampshire</a>';
		document.title = "TRImapper.com - New Hampshire Ironman 70.3 Races, 70.3 Races in New Hampshire";
		break;
	case "state=ri":
	    map.setCenter(new GLatLng(41.693411,-71.571999), 10);
		pagelink = '<a href="'+document.URL+'">Triathlons in Rhode Island</a>';
		document.title = "TRImapper.com - Rhode Island Ironman 70.3 Races, 70.3 Races in Rhode Island";
		break;
	case "state=tx":
	    map.setCenter(new GLatLng(31.709167,-98.990833), 6);
		pagelink = '<a href="'+document.URL+'">Triathlons in Texas</a>';
		document.title = "TRImapper.com - Texas Ironman 70.3 Races, 70.3 Races in Texas";
		break;
	case "state=wa":
	    map.setCenter(new GLatLng(47.427017,-120.513541), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Washington</a>';
		document.title = "TRImapper.com - Washington Ironman 70.3 Races, 70.3 Races in Washington";
		break;
	case "state=ab":
	    map.setCenter(new GLatLng(54.239550,-114.697265), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in Alberta</a>';
		document.title = "TRImapper.com - Alberta Ironman 70.3 Races, 70.3 Races in Alberta";
		break;
	case "state=on":
	    map.setCenter(new GLatLng(49.066668,-84.418945), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in Ontario</a>';
		document.title = "TRImapper.com - Ontario Ironman 70.3 Races, 70.3 Races in Ontario";
		break;
	case "state=qr":
	    map.setCenter(new GLatLng(19.911383,-88.011474), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Quintana Roo</a>';
		document.title = "TRImapper.com - Quintana Roo Ironman 70.3 Races, 70.3 Races in Quintana Roo";
		break;
	case "cntry=sn":
	    map.setCenter(new GLatLng(1.312751,103.807067), 9);
		pagelink = '<a href="'+document.URL+'">Triathlons in Singapore</a>';
		document.title = "TRImapper.com - Singapore Ironman 70.3 Races, 70.3 Races in Singapore";
		break;
	case "cntry=au":
	    map.setCenter(new GLatLng(47.635783,13.403320), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Austria</a>';
		document.title = "TRImapper.com - Austria Ironman 70.3 Races, 70.3 Races in Austria";
		break;
	case "cntry=gm":
	    map.setCenter(new GLatLng(51.013754,9.997558), 6);
		pagelink = '<a href="'+document.URL+'">Triathlons in Germany</a>';
		document.title = "TRImapper.com - Germany Ironman 70.3 Races, 70.3 Races in Germany";
		break;
	case "cntry=sz":
	    map.setCenter(new GLatLng(46.792538,8.470458), 7);
		pagelink = '<a href="'+document.URL+'">Triathlons in Switzerland</a>';
		document.title = "TRImapper.com - Switzerland Ironman 70.3 Races, 70.3 Races in Switzerland";
		break;
	case "cntry=uk":
	    map.setCenter(new GLatLng(54.110942,-3.911132), 5);
		pagelink = '<a href="'+document.URL+'">Triathlons in United Kingdom</a>';
		document.title = "TRImapper.com - United Kingdom Ironman 70.3 Races, 70.3 Races in United Kingdom";
		break;
	case "cntry=br":
	    map.setCenter(new GLatLng(-15.538375,-54.843750), 4);
		pagelink = '<a href="'+document.URL+'">Triathlons in Brazil</a>';
		document.title = "TRImapper.com - Brazil Ironman 70.3 Races, 70.3 Races in Brazil";
		break;
	default:
	    map.setCenter(new GLatLng(0,0), 1);
		pagelink = '<a href="'+document.URL+'">TRImapper.com - 2010 Ironman 70.3 Series Race Map</a>';
		break;
	}
    }
    resetMapPosition();

    var baseIcon = new GIcon();
    baseIcon.iconSize = new GSize(16,27);
    baseIcon.iconAnchor = new GPoint(8, 20);
    baseIcon.infoWindowAnchor = new GPoint(8,8);

    var info = document.getElementById("sc4");

    // TODO - maybe make this one array of objects?
    var markerArray = new Array();
    var markerTitles = new Array();
    var markerPointsArray = new Array();
    var markerCallbacks = new Array();
    var markerTagStrings = new Array();
    var markerAddresses = new Array();
    var markerCityZips = new Array();
    var markersShown = new Array();
    var markerLength = 0;
    var tagToCountTable = {};

    function addTagToList(newTag) {
		if (tagToCountTable[newTag]) {
			tagToCountTable[newTag]++;
        } else {
            tagToCountTable[newTag] = 1;
        }
    }

    function sortByCount(a, b) {
        return tagToCountTable[b] - tagToCountTable[a];
    }

    function myEncodeURI(source) {
        // Do the javascript thing, but encode a space as a +
        var nextSpace = source.indexOf(' ');
        while (nextSpace != -1) {
            source = source.substring(0, nextSpace) + "+" + source.substring(nextSpace+1);
            nextSpace = source.indexOf(' ');
        }
        return encodeURI(source);
    }

	function zoomIN(cord1,cord2){
//	alert("cord1:"+cord1+" cord2:"+cord2);
		map.centerAndZoom(new GPoint(cord2, cord1), 16);
	}

    function createMarker(point, caption, index, markerColor, raceid) {

// new code to change the marker color
		var icon = new GIcon(baseIcon);
		icon.image = "http://www.trimapper.com/images/smmarker_" + markerColor + ".png";
		var marker = new GMarker(point, icon);
		
        // Show this marker's index in the info window when it is clicked
        GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(caption), marker.openInfoWindowTabsHtml([new
GInfoWindowTab('Race',caption), new GInfoWindowTab('Details','<iframe src="http://www.trimapper.com/im703/details/'+raceid+'.htm" width="390" height="141" frameborder="0"  style="margin-top:1px;margin-bottom:1px;margin-left:1px;margin-right:1px;"></iframe>')]);
		});
				

        markerCallbacks[index] = function() {
            markerArray[index].openInfoWindowHtml(caption);
        }

        return marker;
    }

    function filterTags(tag) {
        if (tag == '') {
            // special case - show all
            for (var i = 0; i < markerLength; i++) {
                if (markersShown[i] == false) {
                    // Display it.
                    markersShown[i] = true;
                    map.addOverlay(markerArray[i]);
                    var divInfo = document.getElementById("entry" + i);
                    divInfo.style.display = "";
                }
            }
            return;
        }
        var tagRE = new RegExp("\\|" + tag + "\\|");
        for (var i = 0; i < markerLength; i++) {
            if (markerTagStrings[i].match(tagRE)) {
                // Display the text and marker
                if (markersShown[i] == false) {
                    // We need to display it.
                    markersShown[i] = true;
                    map.addOverlay(markerArray[i]);
                    var divInfo = document.getElementById("entry" + i);
                    divInfo.style.display = "";
                }
            } else {
                // Hide text and marker
                if (markersShown[i] == true) {
                    // Hide it.
                    markersShown[i] = false;
                    map.removeOverlay(markerArray[i]);
                    var divInfo = document.getElementById("entry" + i);
                    divInfo.style.display = "none";
                }
            }
        }
    }

    var request = GXmlHttp.create();
    //request.open("GET", "data2.xml", true);
    request.open("GET", xmlFileName, true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
		var xmlDoc = request.responseXML;
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		markerLength = markers.length;
		for (var i = 0; i < markers.length; i++) {
			markerPointsArray[i] = new GPoint(parseFloat(markers[i].getAttribute("lng")),parseFloat(markers[i].getAttribute("lat")));
			var colorMarker = new String(markers[i].getAttribute("color"));
			markerTitles[i] = new String(markers[i].getAttribute("title"));
			var captionText = new String(markers[i].getAttribute("caption"));
			var latText = new String(markers[i].getAttribute("lat"));
			var lngText = new String(markers[i].getAttribute("lng"));
			var regStatus = new String(markers[i].getAttribute("status"));
			markerAddresses[i] = new String(markers[i].getAttribute("address"));
			markerCityZips[i] = new String(markers[i].getAttribute("cityZip"));
			var url = new String(markers[i].getAttribute("url"));
			var races = new String(markers[i].getAttribute("races"));
            var raceid = new String(markers[i].getAttribute("raceid"));
//	            var toform = '<form action="http://maps.google.com/maps" method="get" target="_blank" class="tiny">';
//	            toform += 'Enter your home address here: <br /><input type="text" name="saddr" value="" size=30 class="tiny"><br />';
//	            toform += '<input type="hidden" name="daddr" value="' + latText + ', ' + lngText + '" />';
//	            toform += '<input type="submit" value="Directions"/></form>';				
				
			var addrinfo = '<p class="tiny">Event info:<br>' + races +'<br>'+ markerAddresses[i] + '<br></p>';
			var website = '<a href="' + url + '" target="_blank" class="tiny">Website</a>';
			var zoomin = '&nbsp;|&nbsp;<a href="javascript:zoomIN'+markerPointsArray[i]+';" class="tiny">Zoom In</a>';
			var html = '<table border="0" cellspacing="0" cellpadding="2"><tr><td><img src="images/'+raceid+'.jpg" width="150" height="100" /></td><td>&nbsp;</td><td><b><u>'+markerTitles[i]+'</u></b><br>'+captionText+'<p class="tiny">Registration Status: '+regStatus+'</p><p class="tiny">Event info:<br>' + races +'<br>'+ markerAddresses[i] + '<br></p></td></tr></table>';
			

//          var report = '&nbsp;|&nbsp;<a href="mailto:admin@trimapper.com?subject=Update/Bad%20TRI&body=Update/Bad%20TRI:  Race ID: '+raceid+'  Tri: '+markerTitles[i]+'" class="tiny">Update/Bad TRI</a>';			
			

 
			if (document.getElementById('loadingMessage')){	
				document.getElementById('loadingMessage').innerHTML = "Loading " + i + "of " + markerLength;
			}
								 
//            markerArray[i] = createMarker(markerPointsArray[i], captionText+"<br><b><u>" + markerTitles[i] + "</u></b>" + addrinfo+website+zoomin, i, colorMarker);
			markerArray[i] = createMarker(markerPointsArray[i], html+website+zoomin, i, colorMarker, raceid);
            map.addOverlay(markerArray[i]);
			markerTagStrings[i] = new String(markers[i].getAttribute("tags"));
			var entry = document.createElement("div");
			entry.setAttribute("id", "entry" + i);
            entry.setAttribute("style", "");
            var boldPart = document.createElement("b");
            var linkPart = document.createElement("a");
            linkPart.setAttribute("href", "javascript:callback" + i + "();");
            var boldText = document.createTextNode(markerTitles[i]);
            boldPart.appendChild(boldText);
            linkPart.appendChild(boldPart);

//            var captionPart = document.createTextNode(" = " + markerCityZips[i]);
			var captionLoc = document.createTextNode(markerCityZips[i]);
			var br = document.createElement("br");



			// Find the tags.
            var tagPart = document.createTextNode(" Tags: ");
            var tagsPart = document.createElement("span");
            var tempString = markerTagStrings[i];
            // Skip the first '|'
            tempString = tempString.substring(1);
            for (; tempString.length > 0;) {
				var nextPipe = tempString.indexOf('|');
					if (nextPipe == -1) {
                        // String is busticated.
                        tempString = ''
                    } else {
                        var nextTag = tempString.substring(0, nextPipe);
                        addTagToList(nextTag);
                        // Add links to tags
                        tempString = tempString.substring(nextPipe+1);
                        var tempLinkPart = document.createElement("a");
                        tempLinkPart.setAttribute("href", "javascript:filterTags('" + nextTag + "');");
                        var tempLinkText = document.createTextNode(nextTag);
                        var space = document.createTextNode(" ");
                        tempLinkPart.appendChild(tempLinkText);
                        tagsPart.appendChild(tempLinkPart);
                        tagsPart.appendChild(space);
                    }
                }

                entry.appendChild(linkPart);
//                entry.appendChild(captionPart);
//                entry.appendChild(tagPart);
//                entry.appendChild(tagsPart);
                info.appendChild(entry);
				entry.appendChild(br);
				info.appendChild(entry);
				entry.appendChild(captionLoc);
				info.appendChild(entry);
            }
            // Sort the tags.
            allTags = new Array();
            var j = 0;
            for (tag in tagToCountTable) {
                allTags[j] = tag;
                j++;
            }
            // Use this to sort by count
            //allTags.sort(sortByCount);
            allTags.sort();
 
            // Add the list of all tags
            var tags = document.getElementById("sc1");
            var monthtags = document.getElementById("sc2");
            var tagAllEntry = document.createElement("a");
            tagAllEntry.setAttribute("href", "javascript:filterTags('');");
            var tagAllText = document.createTextNode('(All)(' + markerLength + ')');
            tagAllEntry.appendChild(tagAllText);
            tags.appendChild(tagAllEntry);
            var space = document.createTextNode(' ');
            tags.appendChild(space);

            // And insert them.
            var space = document.createTextNode(' ');
            for (var j = 0; j < allTags.length; j++) {
                var tempLinkEntry = document.createElement("a");
                tempLinkEntry.setAttribute("href", "javascript:filterTags('" + allTags[j] + "');");
                var tempLinkText = document.createTextNode(allTags[j] + "(" + tagToCountTable[allTags[j]] + ")");
                tempLinkEntry.appendChild(tempLinkText);
	//			alert("value:"+allTags[j]);
				if (allTags[j] == ' January ' || allTags[j] == ' February ' || allTags[j] == ' March ' || allTags[j] == ' April ' || allTags[j] == ' May ' || allTags[j] == ' June ' || allTags[j] == ' July ' || allTags[j] == ' August ' || allTags[j] == ' September ' || allTags[j] == ' October ' || allTags[j] == ' November ' || allTags[j] == ' December ' ) {
                monthtags.appendChild(tempLinkEntry);
                var space = document.createTextNode(' ');
                monthtags.appendChild(space);				
				} else {
                tags.appendChild(tempLinkEntry);
                var space = document.createTextNode(' ');
                tags.appendChild(space);
				}
            }
            for (var j = 0; j < markerLength; j++) {
                markersShown[j] = true;
                eval('callback' + j + ' = function() {markerCallbacks[' + j + ']();}');
            }

        } 
    }
    request.send(null);
    //]]>
