    //<![CDATA[
        
    // We store the link text as a variable so we can 
    // restore it later if needed.
    var map = new GMap(document.getElementById("map"));
	var captionToUse = '';
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
 
 	function resetMapPosition() {
        map.centerAndZoom(new GPoint(-93.275454, 30.240705), 10);
    }
 
 	function resetMapLocation(city) {	
		if(city == 'houston') {
		    map.centerAndZoom(new GPoint(-95.309789, 29.813142), 7);
		} else if(city =='galveston') {
			map.centerAndZoom(new GPoint(-94.800238, 29.330501), 5);
		} else if(city == 'aransas') {
			map.centerAndZoom(new GPoint(-97.105137, 27.770678), 5);
		} else if(city == 'victoria') {
			map.centerAndZoom(new GPoint(-96.974119, 28.794935), 5);
		} else if(city =='beaumont') {
			map.centerAndZoom(new GPoint(-94.109705, 30.073712), 5);
		} else if(city == 'lafayette') {
			map.centerAndZoom(new GPoint(-92.066574, 30.232955), 5);
		}
    }
    resetMapPosition();
   
    var baseIcon = new GIcon();
    baseIcon.image = "http://www.nppa.org/news_and_events/hurricane/gas/icons/mm_20_red.png";
    baseIcon.shadow = "";
    baseIcon.iconSize = new GSize(12, 20);
    baseIcon.shadowSize = new GSize(22, 20);
    baseIcon.iconAnchor = new GPoint(6, 20);
    baseIcon.infoWindowAnchor = new GPoint(5, 1);
    var newIcon = new GIcon();
    newIcon.image = "http://www.nppa.org/news_and_events/hurricane/gas/icons/mm_20_green.png";
    newIcon.shadow = "";
    newIcon.iconSize = new GSize(12, 20);
    newIcon.shadowSize = new GSize(22, 20);
    newIcon.iconAnchor = new GPoint(6, 20);
    newIcon.infoWindowAnchor = new GPoint(5, 1);
    var appendIcon = new GIcon();
    appendIcon.image = "http://www.nppa.org/news_and_events/hurricane/gas/icons/mm_20_purple.png";
    appendIcon.shadow = "";
    appendIcon.iconSize = new GSize(12, 20);
    appendIcon.shadowSize = new GSize(22, 20);
    appendIcon.iconAnchor = new GPoint(6, 20);
    appendIcon.infoWindowAnchor = new GPoint(5, 1);

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

    // 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 markersShown = new Array();
    var tagToCountTable = {};
    var xmlFileName = "rita_gas.xml";
    
    var bAddMarker = false;
    var bAppendMarker = false;

    function encodeMyHtml(rawText) {
     encodedHtml = escape(rawText);
     encodedHtml = encodedHtml.replace(/\?/g,"%3F");
     encodedHtml = encodedHtml.replace(/=/g,"%3D");
     encodedHtml = encodedHtml.replace(/&/g,"%26");
     encodedHtml = encodedHtml.replace(/@/g,"%40");
     return encodedHtml;
   } 

    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 createMarker(point, caption, index, isNew, isAppend) {
	if (isAppend) {
	    var marker = new GMarker(point, appendIcon);
	} else {
	    if (isNew) {
		var marker = new GMarker(point, newIcon);
	    } else {
		var marker = new GMarker(point, baseIcon);
	    }
	}

        // Show this marker's index in the info window when it is clicked
        GEvent.addListener(marker, "click", function() {
		if (!bAppendMarker) {
		    marker.openInfoWindowHtml(caption);
		} else {
		    //alert("Got click in marker listener");
		    addMarker(point.x, point.y, true);
		}
                });

        markerCallbacks[index] = function() {
            // TODO - hmm, this locks up, basically.  Hmm.
            //map.recenterOrPanToLatLng(markerArray[index]);
            markerArray[index].openInfoWindowHtml(caption);
        }

        return marker;
    }

    function setupCaptionText(text) {
	if (text != '') {
            captionToUse = text;
	} else {
            bAddMarker = false;
	    bAppendMarker = false;
        }
    }
    function addMarkerOverlay(overlay) {
	// TODO - is this guy used?
	addMarker(overlay.x, overlay.y, true);
    }
    function addMarker(xCoord, yCoord, tryAppend) {
	//alert("addMarker: append=" + tryAppend + " bAdd=" + bAddMarker + " x=" + xCoord);
        if (bAddMarker || bAppendMarker) {
		    var postString = "lng=" + xCoord + "&lat=" + yCoord + "&desc=" + encodeMyHtml(captionToUse); 
		    if (tryAppend) {
				postString = postString + "&append=1";
		    }
            captionToUse = '';
        	    //alert("url is: " + urlToGet);
           		// TODO - hacky, we should be using POST but I'm tired.
  
  			var requestAdd = GXmlHttp.create();
            requestAdd.open("POST", "http://www.nppa.org/news_and_events/hurricane/gas/ritagasadder.php", false);
		    requestAdd.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            requestAdd.send(postString); 
            bAddMarker = false;
		    bAppendMarker = false;
	    	//sleep(1);
            	//window.setTimeout('refreshMap()', 1000);
          	  //window.setTimeout('window.location.reload(true)', 2000);
	   		//refreshMap();
	   		window.location.reload(true);
        }
    }

    var bDoubleClickHappened = false;
    var bIsIE;
    if (navigator.appName == 'Microsoft Internet Explorer'){
        document.ondblclick = handleDblClick;
        bIsIE = true;
    } else {
        window.ondblclick = handleDblClick;
        bIsIE = false;
    }
  
    function handleDblClick(e) {
        bDoubleClickHappened = true;
    }  


    GEvent.addListener(map, "click", function(overlay, point) {
        if(overlay) {
            ;
	    //addMarkerOverlay(overlay)
        }
        else if(point) {
	    if (bAddMarker) {
    		addMarker(point.x, point.y, false);
	    }
        }
	// if we get a click, get out of add/append mode.
	bAddMarker = false;
	bAppendMarker = false;
    });
    
    var request = GXmlHttp.create();
    // Fix found at http://groups.google.com/group/Google-Maps-API/browse_thread/thread/efe6fa8a28307cbd/42ff2c27f3541f20?q=IE+cache+XML&rnum=2#42ff2c27f3541f20
    request.open("GET", xmlFileName + "?" + Math.random(), true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            //alert("Status is: " + request.status);
            var xmlDoc = request.responseXML;
            var markers = xmlDoc.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
                markerPointsArray[i] = new GPoint(parseFloat(markers[i].getAttribute("lng")),
                        parseFloat(markers[i].getAttribute("lat")));
                var captionText = new String(markers[i].getAttribute("caption"));
                markerArray[i] = createMarker(markerPointsArray[i], captionText, i, ((markers.length - i) < 50), (captionText.indexOf("<br><br>") >= 0));
                map.addOverlay(markerArray[i]);
                // Get rid of <br/>'s in text.
                //var captionPart = document.createTextNode(" - " + captionText.replace(/<br\/>/g, " "));

            }
        } 
    }
	request.send(null);
/*
 
	var request = GXmlHttp.create();
	request.open("GET", "rita_gas.xml", true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
    		var xmlDoc = request.responseXML;
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		    for (var i = 0; i < markers.length; i++) {
				var point = new GPoint(parseFloat(markers[i].getAttribute("lng")),
										parseFloat(markers[i].getAttribute("lat")));
     		 	var captionText = new String(markers[i].getAttribute("caption"));
     		 	// var marker = new GMarker(point);
      			var marker = createMarker(point, captionText, i, 0, 0);
      			map.addOverlay(marker);
   			}
 		}
	}
	request.send(null);
 */	
 	//]]>
