    //<![CDATA[
var map_type = "normal";
	// === Create an associative array of GIcons() ===
      var gicons = [];
      gicons["chrismas-party"] = new GIcon(G_DEFAULT_ICON);
      gicons["chrismas-party"].image = "images/icons/chrismas-party.png";
      gicons["chrismas-party"].iconSize = new GSize(25,25);

      gicons["privateperson"] = new GIcon(G_DEFAULT_ICON);
      gicons["privateperson"].image = "images/icons/privateperson.png";
      gicons["privateperson"].iconSize = new GSize(25,25);

      gicons["organisation"] = new GIcon(G_DEFAULT_ICON);
      gicons["organisation"].image = "images/icons/organisation.png";
      gicons["organisation"].iconSize = new GSize(25,25);
      
      gicons["commercial"] = new GIcon(G_DEFAULT_ICON);
      gicons["commercial"].image = "images/icons/commercial.png";
      gicons["commercial"].iconSize = new GSize(25,25);
            
      gicons["chrismas-party"] = new GIcon(G_DEFAULT_ICON);
      gicons["chrismas-party"].image = "images/icons/chrismas-party.png";
      gicons["chrismas-party"].iconSize = new GSize(25,25);

      gicons["party"] = new GIcon(G_DEFAULT_ICON);
      gicons["party"].image = "images/icons/party.png";
      gicons["party"].iconSize = new GSize(25,25);

      gicons["sport"] = new GIcon(G_DEFAULT_ICON);
      gicons["sport"].image = "images/icons/sport.png";
      gicons["sport"].iconSize = new GSize(25,25);

      gicons["shopping"] = new GIcon(G_DEFAULT_ICON);
      gicons["shopping"].image = "images/icons/shopping.png";
      gicons["shopping"].iconSize = new GSize(25,25);

      gicons["sightseeing"] = new GIcon(G_DEFAULT_ICON);
      gicons["sightseeing"].image = "images/icons/sightseeing.png";
      gicons["sightseeing"].iconSize = new GSize(25,25);

      gicons["school"] = new GIcon(G_DEFAULT_ICON);
      gicons["school"].image = "images/icons/school.png";
      gicons["school"].iconSize = new GSize(25,25);

      gicons["others"] = new GIcon(G_DEFAULT_ICON);
      gicons["others"].image = "images/icons/others.png";
      gicons["others"].iconSize = new GSize(25,25);

    if (GBrowserIsCompatible()) {
      var side_bar_html = "";
      var gmarkers = [];
      var htmls = [];
      var ii = 0;


      // A function to create the marker and set up the event window
      function createMarker(point,name,html,icontype) {
        var marker = new GMarker(point, gicons[icontype]);
        marker.mycategory = icontype;                                 
        marker.myname = name;

        //GEvent.addListener(marker, "mouseover", function() {
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
        });
        gmarkers[ii] = marker;
        htmls[ii] = html;
        side_bar_html += '<a href="javascript:myclick(' + ii + ')">' + name + '</a><br>';
        ii++;
        return marker;
      }


      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].show();
          }
        }
        // == check the checkbox ==
        document.getElementById(category+"box").checked = true;
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].hide();
          }
        }
        // == clear the checkbox ==
        document.getElementById(category+"box").checked = false;
        // == close the info window, in case its open on a marker that we just hid
        map.closeInfoWindow();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,category) {
        if (box.checked) {
          show(category);
        } else {
          hide(category);
        }
        // == rebuild the side bar
        makeSidebar();
      }

      // This function picks up the click and opens the corresponding info window
      function myclick(i) {
        gmarkers[i].openInfoWindowHtml(htmls[i]);
      }

      // == rebuilds the sidebar to match the markers currently displayed ==
      function makeSidebar() {
        var html = "";
        for (var i=0; i<gmarkers.length; i++) {
          if (!gmarkers[i].isHidden()) {
            html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a><br>';
          }
        }
//			dont show sidebar in Country level
//        document.getElementById("side_bar").innerHTML = html;
      }


      // create the map
      var map = new GMap2(document.getElementById("map"));
      // Get the list of map types      
      var mt = map.getMapTypes();
      
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
		if(map_type!=null){
			if (map_type == "satellite") {
				map.setMapType(G_SATELLITE_MAP)
			}
			else 
				map.setMapType(G_NORMAL_MAP);
		}
      map.setCenter(new GLatLng( lat, lng), attr);

      // A function to read the data
      function readMap(url) {
        var request = GXmlHttp.create();
        request.open("GET", url, true);
        request.onreadystatechange = function() {
          if (request.readyState == 4) {
            var xmlDoc = GXml.parse(request.responseText);
            // obtain the array of markers and loop through it
            var markers = xmlDoc.documentElement.getElementsByTagName("marker");
            // hide the info window, otherwise it still stays open where the removed marker used to be
            map.getInfoWindow().hide();
            
            map.clearOverlays();            
            
            // empty the arrays
            gmarkers = [];
            htmls = [];
            ii = 0;

            // reset the side_bar
            side_bar_html="";
          
            for (var i = 0; i < markers.length; i++) {
              // obtain the attribues of each marker
              var lat = parseFloat(markers[i].getAttribute("lat"));
              var lng = parseFloat(markers[i].getAttribute("lng"));
              var point = new GLatLng(lat,lng);
//              var html = markers[i].getAttribute("html");
				var html = GXml.value(markers[i].getElementsByTagName("infowindow")[0]);
              var label = markers[i].getAttribute("label");
            var icontype = markers[i].getAttribute("icontype");
              
              // create the marker
              var marker = createMarker(point,label,html,icontype);
              map.addOverlay(marker);
            }
                    // == show or hide the categories initially ==
        hide("chrismas-party");
        show("party");
        show("sport");
        show("commercial");
        show("privateperson");				
		show("organisation");
		show("shopping");
		show("sightseeing");
		show("school");
        // == create the initial sidebar ==
        makeSidebar();

          }
        }
        request.send(null);
      }
      
      // When initially loaded, use the data from "xml/chinese-embassies-markers.xml"
		readMap(mapfile);
    }

    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
    // This Javascript is based on code provided by the
    // Blackpool Community Church Javascript Team
    // http://www.commchurch.freeserve.co.uk/   
    // http://econym.googlepages.com/index.htm

    //]]>
