Association = new Class({
  initialize: function(element) {
    this.element = element;
    
    var websiteElement = $$('#website')[0];
      if(websiteElement) {
        if(websiteElement.getElement('a').innerHTML != '') {
          // window.location.href = websiteElement.getElement('a').href;
        } else {
          websiteElement.getParent().destroy();
        }
      }
    
    this.setupLink();
    
    if(this.element.getElements('.kindergarten-hidden').length > 0) {
      this.setupMap();
      this.setupPoints();
    }
  },

  setupLink: function() {
    $$('a[href=/kindergartens/associations.html]').each(function(link) {
      link.getParents('li').each(function(li){Kartel.selectMenu(li)});
    });
  },
  
  setupPoints: function() {
    this.bounds = new GLatLngBounds();
    var index = 0;
    
    this.element.getElements('.kindergarten-hidden').each(function(kindergarten) {
      var address = kindergarten.getElement('.address').innerHTML;
      var name = kindergarten.getElement('.name').innerHTML;
      address = address.replace(/,\s*,/gmi, ', ');
      
      var formattedAddress = address.replace(/,/gmi, '$br');
      formattedAddress = formattedAddress.replace(/\$br\s*\$br/gmi, '<br />');
      formattedAddress = formattedAddress.replace(/\$br/gmi, '<br />');
      
      this.addPoint(name, address, formattedAddress, index, kindergarten);
      
      index += 1;
    }.bind(this));
  },
  
  addPoint: function(name, address, formattedAddress, index, element) {
    this.geocoder.getLatLng(
      address, function(point) {
        if(point) {
          // Create a lettered icon for this point using our icon class
          var baseIcon = new GIcon(G_DEFAULT_ICON);
          var letter = String.fromCharCode("A".charCodeAt(0) + index);
          var letteredIcon = new GIcon(baseIcon);
          letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";

          // Set up our GMarkerOptions object
          markerOptions = { icon:letteredIcon };
          var marker = new GMarker(point, markerOptions);            

          this.map.addOverlay(marker);

          marker.bindInfoWindowHtml('<p><strong>' + name + '</strong></p><p>' + formattedAddress + '</p>');

          this.bounds.extend(marker.getPoint());
          this.map.setCenter(this.bounds.getCenter());    
          this.map.setZoom(this.map.getBoundsZoomLevel(this.bounds));
          
          var table = element.getPrevious();
          var tr = table.getElement('tr');
          var newtd = new Element('td');
          newtd.inject(tr, 'top');
          newtd.innerHTML = String.fromCharCode("A".charCodeAt(0) + index) + ':';
        }
      }.bind(this)
    );
  },

  setupMap: function() {
    var wrapper = new Element('div', {'class': 'map-wrapper image block'});
    wrapper.inject(this.element);
    
    this.mapElement = new Element('div');
    this.mapElement.addClass('map');
    this.mapElement.setStyles({
      width: '480px', height: '480px', overflow: 'hidden'
    });
    this.mapElement.inject(wrapper);
    
    this.map = new GMap2(this.mapElement);
    var ui = this.map.getDefaultUI();
    ui.controls.menumaptypecontrol = false;
    this.map.setUI(ui);
    this.geocoder = new GClientGeocoder();
    
    // this.address = $$('table.detail tr td')[0].innerHTML;
    // 
    // this.geocoder.getLatLng(
    //   this.address, function(point) {
    //   if (point) {
    //     this.map.setCenter(point, 13);
    //   }
    // }.bind(this));

    setTimeout(function() {
      var cr = this.mapElement.getElement('#copyright');
      if(cr) cr.setStyle('display', 'none');
    }.bind(this), 1000);
  }
});

Association.ready = function() {
  var assoc = $$('.associated-kindergartens')[0];
  if(assoc) {
    new Association(assoc);
  }
};

window.addEvent('domready', Association.ready);