var map;
var startLatLng;
var markers = new Array();
var markerNum = 0;
var photoClusterer;
var videoClusterer;
var baseIcon;
var photoIcon;
var photoMany;

function archConCircPoint (lat, lng, seq) {
   segDiv = 6;
   if (seq > 24) {
      segDiv = 12;
      R = 0.0007 * (Math.floor(seq / 24) + 1);
   } else {
      R = 0.0007 * Math.floor(seq / 12);
   }
   segment = Math.PI/segDiv;

   t = segment * seq;
   x = R * Math.cos(t);
   y = R * Math.sin(t);
   newLat = lat + y;
   newLng = lng + x;
   finalLatLng = new GLatLng(newLat, newLng);
   return finalLatLng;
}

function pointOccupied (checkLat, checkLng) {
   var isTaken = false;
   if (markers.length > 0) {
      for (var m = 0; m < markers.length; m++) {
          var gmLatLng = markers[m].getLatLng();
          if (Math.abs(gmLatLng.lat() - checkLat) < 0.0005 && Math.abs(gmLatLng.lng() - checkLng) < 0.0005) {
             isTaken = true;
          }
      }
   }
   return isTaken;
}

function randomPoint () {
   var bounds = map.getBounds();
   var mapCenter = map.getCenter();
   var southWest = bounds.getSouthWest();
   var northEast = bounds.getNorthEast();
   var lngSpan = (northEast.lng() - southWest.lng()) / 2;
   var latSpan = (northEast.lat() - southWest.lat()) / 2;
   var lngOffset = (lngSpan * Math.random()) - (lngSpan / 2);
   var latOffset = (latSpan * Math.random()) - (latSpan / 2);
   var finalLatLng = new GLatLng(mapCenter.lat() + latOffset, mapCenter.lng() + lngOffset);
   return finalLatLng;
}

function addNextMarker() {
   //newLatLng = archConCircPoint(startLatLng.lat(), startLatLng.lng(), markerNum);
   newLatLng = randomPoint();
   while (pointOccupied(newLatLng.lat(), newLatLng.lng())) {
      newLatLng = randomPoint();
   }
   var gmarker;
   //if (markerNum - (Math.floor(markerNum/2) * 2) == 1) {
      gmarker = new GMarker(newLatLng, photo);
      photoClusterer.AddMarker(gmarker, "photo");
   //} else {
   //   gmarker = new GMarker(newLatLng, video);
   //   videoClusterer.AddMarker(gmarker, "video");
   //}
   markers.push(gmarker);
   var mkr = markerNum.toString();
   GEvent.addListener(gmarker, "click", function() {
      var glatlng = gmarker.getLatLng();
      gmarker.openInfoWindowHtml(glatlng.lat().toString() + "," + glatlng.lng().toString());
   });
   if (markerNum == 0) {
      markerNum = 12;
   } else {
      markerNum++;
   }
}

function load() {
   if (GBrowserIsCompatible()) {
      startLatLng = new GLatLng(-33.878575030286804, 151.21983289718628); // Home...

      baseIcon = new GIcon();
      baseIcon.iconSize=new GSize(32,32);
      baseIcon.shadowSize=new GSize(56,32);
      baseIcon.iconAnchor=new GPoint(16,32);
      baseIcon.infoWindowAnchor=new GPoint(16,0);

      photoMany = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal4/icon38.png", null, "http://maps.google.com/mapfiles/kml/pal4/icon38s.png");
      photo = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal4/icon46.png", null, "http://maps.google.com/mapfiles/kml/pal4/icon46s.png");
      videoMany = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon22.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon22s.png");
      video = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon30.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon30s.png");

      map = new GMap2(document.getElementById("map"));
      map.addControl(new GLargeMapControl());
      map.setCenter(startLatLng, 16);
      photoClusterer = new Clusterer(map);
      photoClusterer.SetIcon(photoMany);
      photoClusterer.maxVisibleMarkers = 2;
      photoClusterer.setTooltip("[[Count]] Photos Taken Near Here<br/>Click To Zoom In");
      videoClusterer = new Clusterer(map);
      videoClusterer.SetIcon(videoMany);
      videoClusterer.maxVisibleMarkers = 5;
      videoClusterer.setTooltip("Click Here<br/>For More Videos");
   }
}