var Google_map = new Class(
{
  initialize: function()
  {
    this.loadedBounds     = [];
    this.currBounds       = [];
    this.currLoadedBounds = [];
    this.markers          = [];
    this.zoomed           = false;
    this.arrNotFound      = [];
    this.load();
  },
  load: function() 
  {
    var self = this;
    if (GBrowserIsCompatible()) 
    {
      this.map = new GMap2($("googlemap"));
      this.map.setCenter(new GLatLng(52.384207, 5.382766), 7);
      this.map.setMapType(G_SATELLITE_TYPE);
    }
  },
  getMarkers: function()
  {
    var self      = this;
    var url       = '/data/media/markers/nl';
    var objAjax   = new Ajax (url, 
    {
      method: 'post',
      onComplete: function(res)
      {
        self.loadMarkers(res);
      }
    });
    objAjax.self = this;
    objAjax.request();
  },
  loadMarkers: function(res)
  {
    var marker = 0;
    if (this.markers.length > 0)
    {
      while (this.markers.length > 0)
      {
        marker = this.markers.pop();
        if (!marker.draggable)
        {
          this.map.removeOverlay(marker);
        }
      }
    }
      
    var res       = Json.evaluate(res);
    var markers   = res['marker'];
    var cntApk    = res['marker'].length;
    var i         = 0;
    if (cntApk > 0)
    {
      while(i < cntApk)
      {
        this.addMarker(new GLatLng(parseFloat(markers[i].lat), parseFloat(markers[i].lng)), false, markers[i]);
        i++;
      }
    }
    loading  = false;
  },
  addMarker: function(point, draggable, content)
  {
    // {draggable: true} maakt alles uiteraard draggable
    // var marker = new GMarker(point, this.getIcon());
    if (draggable)
    {
      var marker = new GMarker(point, {icon: this.getIcon('red')});
      // var marker = new GMarker(point, {draggable: true, icon: this.getIcon('red')});
      marker.draggable = true;
    }
    else
    {
      var marker = new GMarker(point, {icon: this.getIcon()});      
    }
    
    if(!marker) {return false;}
    GEvent.addListener(marker, "click", function() 
    {
      if (content)
      {
        marker.openInfoWindowHtml('<p class="popup" style="display: block; float: left; font-family: verdana, arial; font-size: 10px; color: #000;"><img style="float: left; margin: 0" src="/static/image/std_icon.jpg" /><b>'+content['name']+':</b> <br />'+content['txt']+'<br /><br /><a href="/page/splash/?x=fp" style="color: #333; text-align: right; font-size: 10px; font-family: verdana, arial; display: block;">Teken ook!</a>', {maxWidth: 250});
      }
    });
    GEvent.addListener(marker, "dragstart", function() {
      map.closeInfoWindow();
      });

    GEvent.addListener(marker, "dragend", function() {
      });
    this.map.addOverlay(marker);
    this.markers.push(marker);
    return marker;
  },
  getIcon: function(color)
  {
    if(!this.icon || color)
    {
      var icon              = new GIcon();
      if (color)
      {
        icon.image            = "/static/image/"+color+"_marker.png";
      } 
      else
      {
        icon.image            = "/static/image/green_marker_small.png";
      }      
      icon.shadow           = "/static/image/green_marker_shadow_small.png";
      icon.iconSize         = new GSize(16, 18);
      icon.shadowSize       = new GSize(24, 12);
      icon.iconAnchor       = new GPoint(8, 18);
      icon.infoWindowAnchor = new GPoint(12, 4);
      if (color)
        return icon;
      this.icon             = icon;
    }
    return this.icon;
  },
  //
  // Checks is reload of data is needed
  coordLoaded: function(bounds) 
  {
    if (this.loadedBounds.length == 0 || this.triggerBounds.length == 0) { return false}
    this.getViewBounds();
    var view  = this.viewBounds;
    var trig  = this.triggerBounds;

    if(view[0] > trig[0]){return false;}
    if(view[1] < trig[1]){return false;}
    if(view[2] > trig[2]){return false;}
    if(view[3] < trig[3]){return false;}
    return true;
  },
  getMap: function(){return this.map},
  zoom: function(point) {this.map.setCenter(point,13); this.zoomed=true;}
});

var loading = false;
window.addEvent('unload', GUnload);