    //<![CDATA[
        
    // We store the link text as a variable so we can 
    // restore it later if needed.
    var map = new GMap2(document.getElementById("map"));
    var captionToUse = '';
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    function resetMapPosition() {
        map.setCenter(new GLatLng(-8.099805,112.164449), 18);
    }                               
    function resetMapLocation(city) {
	if(city == 'blitar') {map.setCenter(new GLatLng(-8.115272023028702,112.17699766159058), 18);} 
	else if(city == 'yonifA') {map.setCenter(new GLatLng(-8.115272023028702,112.17699766159058), 18);} 
	else if(city == 'yonifB') {map.setCenter(new GLatLng(-8.116748394666107,112.17548489570618), 18);} 
	else if(city == 'yonifC') {map.setCenter(new GLatLng(-8.114783438414436,112.17425107955933), 18);} 
	else if(city == 'yonifD') {map.setCenter(new GLatLng(-8.114528524466822,112.17308163642883), 18);} 
	else if(city == 'yonifE') {map.setCenter(new GLatLng(-8.114687845703028,112.17299580574036), 18);} 
	else if(city == 'gor') {map.setCenter(new GLatLng(-8.107741381158784,112.17941164970398), 18);} 
	else if(city == 'sman1') {map.setCenter(new GLatLng(-8.100614226326583,112.18005001544952), 18);} 
	else if(city == 'kelgedog') {map.setCenter(new GLatLng(-8.088542386404535,112.18765139579773), 18);} 
	else if(city == 'Gorminarni') {map.setCenter(new GLatLng(-8.096816920170115,112.1735429763794), 18);} 
	else if(city == 'balaikota') {map.setCenter(new GLatLng(-8.09538827403855,112.17441201210022), 18);} 
	else if(city == 'stadion') {map.setCenter(new GLatLng(-8.092731,112.168103), 18);} 
	else if(city == 'auladikda') {map.setCenter(new GLatLng(-8.100857,112.179400), 18);} 
	else if(city == 'aulakecKepanjenkidul') {map.setCenter(new GLatLng(-8.089418708999652,112.16779232025146), 18);} 
	else if(city == 'grahapatria') {map.setCenter(new GLatLng(-8.097491409333642,112.16935873031616), 18);} 
	else if(city == 'aulapgsd') {map.setCenter(new GLatLng(-8.095356408267806,112.17139720916748), 18);} 
	else if(city == 'aulakepanjenlor') {map.setCenter(new GLatLng(-8.094103019285722,112.16963768005371), 18);} 
	else if(city == 'aulaKepanjenkidul') {map.setCenter(new GLatLng(-8.104400874977678,112.16494917869568), 18);} 
	else if(city == 'psbrmardiutomobc') {map.setCenter(new GLatLng(-8.10031681622797,112.17392385005951), 18);} 
	else if(city == 'psbrmardiutomoa') {map.setCenter(new GLatLng(-8.100534562928859,112.1739935874939), 18);}

	}
    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 baseIcon = new GIcon();
    baseIcon.image = "icons/mm_20_red.png";
    //baseIcon.shadow = "icons/mm_20_shadow.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 = "icons/home.png";
    //newIcon.shadow = "icons/mm_20_shadow.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 = "icons/mm_20_purple.png";
    //appendIcon.shadow = "icons/mm_20_shadow.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 markerLength = 0;
    var tagToCountTable = {};
    
    var bAddMarker = false;
    var bAppendMarker = false;

    function encodeMyHtml(rawText) {
     encodedHtml = escape(rawText);
     encodedHtml = encodedHtml.replace(/\//g,"%2F");
     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 markerText = prompt('Enter text for the marker: ', '');
             
            /*var latElement = document.getElementById("addLat");
            var latText = document.createTextNode(xCoord);
            latElement.appendChild(latText);
            var lngElement = document.getElementById("addLng");
            var lngText = document.createTextNode(yCoord);
            lngElement.appendChild(lngText);
            var descriptionElement = document.getElementById("addDescription");
            var descText = document.createTextNode(markerText);
            descriptionElement.appendChild(descText);
            descriptionElement.onchange();*/
            //var addCaptionElem = document.getElementById("addDescription");
	    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", "blitaradder.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, "moveend", function() {
        if (bDoubleClickHappened) {
            addMarker(map.getCenterLatLng().x, map.getCenterLatLng().y);
            bDoubleClickHappened = false;
        }
    });*/

    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();
    function refreshMap() {
    // 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");
            markerLength = markers.length;
            for (var i = 0; i < markers.length; i++) {
                markerPointsArray[i] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng")));
                var captionText = "<div style=\"width: 410px;\">" + markers[i].getAttribute("caption") + "</div>";
                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);
    }
    refreshMap();
    //]]>


