
    //<![CDATA[

    var refresh = true;
    var lastswlat = 0;
    var lastswlong = 0;
    var lastnelat = 0;
    var lastnelong = 0;
    
    function createMarker(map, point, theHtml, phtgr, id, type) {
      if (type == "bunch") {
        var icon = new GIcon(G_DEFAULT_ICON);
        icon.image = "pggroup.png";
        icon.shadow = "blank.gif";
        icon.iconSize = new GSize(26, 26);
        icon.iconAnchor = new GPoint(0, 26);
      } else {
        var icon = new GIcon(G_DEFAULT_ICON);
        icon.image = "geoico.php?src=" + phtgr + "-" + id;
        icon.shadow = "blank.gif";
        icon.iconSize = new GSize(30, 30);
        icon.iconAnchor = new GPoint(0, 30);
      }
      var marker = new GMarker(point, icon);

	
      if (type == "bunch") {
        GEvent.addListener(marker, "click", function() {
          map.zoomIn();
          map.setCenter(marker.getPoint());
        });
        GEvent.addListener(marker, "mouseover", function() {
          marker.openInfoWindowHtml(theHtml);
        });
        GEvent.addListener(marker, "mouseout", function() {
          map.closeInfoWindow();
        });
      } else {
        GEvent.addListener(marker, "mouseover", function() {
          marker.openInfoWindowHtml(theHtml);
        });
        GEvent.addListener(marker, "mouseout", function() {
          map.closeInfoWindow();
        });
        GEvent.addListener(marker, "click", function() {
          window.location = "/photo/" + phtgr + "/" + id + "/";
        });
      }

      return marker;
    }

    function getPoints(map) { 
      var center = map.getCenter();
      
      var bounds = map.getBounds();
      var mapsw = bounds.getSouthWest();
      var mapne = bounds.getNorthEast();
      
      var mapswlat = mapsw.lat();
      var mapswlong = mapsw.lng();
      var mapnelat = mapne.lat();
      var mapnelong = mapne.lng();

      var dataswlat = mapswlat - (mapnelat-mapswlat)/4;
      var dataswlong = mapswlong - (mapnelong-mapswlong)/4;
      var datanelat = mapnelat + (mapnelat-mapswlat)/4;
      var datanelong = mapnelong + (mapnelong-mapswlong)/4;
      
      var datazm = map.getZoom();
	  var datalk = "getpoints.php?swlat="+dataswlat+"&swlong="+dataswlong+"&nelat="+datanelat+"&nelong="+datanelong+"&zm="+datazm;

      if (refresh || mapswlat < lastswlat || mapswlong < lastswlong || mapnelat > lastnelat || mapnelong > lastnelong) {
        lastswlat = dataswlat;
        lastswlong = dataswlong;
        lastnelat = datanelat;
        lastnelong = datanelong;
      map.clearOverlays();
      GDownloadUrl("getpoints.php?swlat="+dataswlat+"&swlong="+dataswlong+"&nelat="+datanelat+"&nelong="+datanelong+"&zm="+datazm, function(data, responseCode) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                   parseFloat(markers[i].getAttribute("lng")));

            map.addOverlay( createMarker( map, point, GXml.value(markers[i]), markers[i].getAttribute("phtgr"), markers[i].getAttribute("id"), markers[i].getAttribute("type") ));
          }
        });
        refresh = false;
      }
    }

    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(10, 10), 2, G_SATELLITE_MAP);
        
        GEvent.addListener(map, "moveend", function(){
          if(map.getZoom()>2) { getPoints(map); }
        });
        GEvent.addListener(map, "zoomend", function(){
          refresh = true;
          getPoints(map);
        });
        GEvent.addListener(map, "click", function(marker, point){
          if (!marker) {
            map.closeInfoWindow();
          }
        });
        GEvent.addListener(map, "dblclick", function(marker, point){
          map.zoomIn();
          map.setCenter(point);
        });
        getPoints(map);
      }
    }

    //]]>
