    //<![CDATA[
        
    // We store the link text as a variable so we can 
    // restore it later if needed.
    // TODO - is this really the only way to include .js files?
    // TODO - this doesn't work in IE.  Argh.
    //document.write("<script type=\"text/javascript\" src=\"commonmapjs.js\"></script>");

    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 markerOption1 = new Array();
    var markerOption2 = new Array();
    var markerLength = 0;
    var tagToCountTable = {};

    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.enableContinuousZoom();
    //map.addControl(new GOverviewMapControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 0)));
    function resetMapPosition() {
        map.setCenter(new GLatLng(30.334361, -97.746048), 11);
    }
    resetMapPosition();

    var baseIcon = new GIcon();
    baseIcon.image = "icons/marker.png";
    baseIcon.shadow = "icons/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(6, 20);
    baseIcon.infoWindowAnchor = new GPoint(6, 20);

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

    function createMarker(point, caption, index) {
        var marker = new GMarker(point);

        // Show this marker''s index in the info window when it is clicked
        GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml("<div style=\"width: 200px;\">" + caption + "</div>");
                });

        markerCallbacks[index] = function() {
            // TODO - hmm, this locks up, basically.  Hmm.
            //map.recenterOrPanToLatLng(markerArray[index]);
            markerArray[index].openInfoWindowHtml("<div style=\"width: 200px;\">" + caption + "</div>");
        }

        return marker;
    }

    /* Common functions. */
    function addMarkerIndex(i) {
        map.addOverlay(markerArray[i]);
    }

    function removeMarkerIndex(i) {
        map.removeOverlay(markerArray[i]);
    }

    function getMarkerPointLat(i) {
        return markerPointsArray[i].y;
    }

    function getMarkerPointLng(i) {
        return markerPointsArray[i].x;
    }

    var request = GXmlHttp.create();
    request.open("GET", xmlFileName + "?" + Math.random(), 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")));
                markerTitles[i] = new String(markers[i].getAttribute("title"));
                var captionText = new String(markers[i].getAttribute("caption"));
                markerAddresses[i] = new String(markers[i].getAttribute("address"));
                markerCityZips[i] = new String(markers[i].getAttribute("cityZip"));
                markerArray[i] = createMarker(markerPointsArray[i], "<b>" + markerTitles[i] + "</b><br/>" + captionText, i);
                map.addOverlay(markerArray[i]);
                markerTagStrings[i] = new String(markers[i].getAttribute("tags"));

                addTagsOfEntry(i, markerTitles[i], captionText);
            }
            finishAddingTags();
        } 
    }
    request.send(null);
    //]]>
