$(document).ready(function() {
  // Ticket vendor page
  if ($('#ticket_vendor_map').length > 0) {
    map = new google.maps.Map2(document.getElementById('ticket_vendor_map'));

    map.setCenter(new google.maps.LatLng(51.303145,10.360107), 6);
    map.addControl(new GLargeMapControl());
    
    function createMarker(ticket_vendor) {
      var point = new GLatLng(ticket_vendor.location.location.lat, ticket_vendor.location.location.lng);
      var marker = new GMarker(point);
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(
          '<div class="ticket-vendor-infowindow">' +
          '<h3>' + ticket_vendor.name + '</h3>' +
          '<p>' + ticket_vendor.address + '<br>' +
          ticket_vendor.zip + ' ' + ticket_vendor.city +
          (ticket_vendor.phone ? '<br>' + ticket_vendor.zip : '') +
          '</p>' +
          '<a href="#" onclick="map.setCenter(new GLatLng(' + ticket_vendor.location.location.lat + ', ' + ticket_vendor.location.location.lng + '), 14);return false;">Zoom</a>' +
          '</div>'
        );
      });
      markerIDs[ticket_vendor.id] = marker;
      return marker;
    }
    
    $.getJSON('/tickets.json', function(json){
      $.each(json, function(i) {
        if (this.ticket_vendor.location) map.addOverlay(createMarker(this.ticket_vendor));
      });
    });
    
    var origLeft = parseInt($('#map-container').css('left'));
    var stuck = false;
    function scrollMap() {
      var b = $(window).scrollTop() + 20;
      var c = $("#map-container");
      if (!stuck) {
        var d = $("#map-anchor").offset().top;
        if (b > d) {
          c.css({position: 'fixed', left: $('#main').position().left + origLeft + 24, top: 20, bottom: 'auto'});
        } else {
          if (b <= d) {
            var mapHeight = $(window).height() - 64;
            c.css({position: 'absolute', left: origLeft, top: 0, bottom: 'auto', height: mapHeight > 550 ? 550 : mapHeight});
            map.checkResize();
          }
        }
      }
      //var fake = document.createElement("div");
      //map.container.appendChild(fake);
      //map.container.removeChild(fake);
      var mapBottomEdge = b + c.outerHeight();
      var contentBottomEdge = $('ul.ticket-vendors').innerHeight() + $('ul.ticket-vendors').offset().top;
      if (mapBottomEdge >= contentBottomEdge) {
        if (!stuck)
          c.css({position: 'absolute', bottom: 0, top: 'auto', left: origLeft});
        stuck = true;
      } else {
        stuck = false;
      }
    }
    if (!$.browser.webkit) {
      $(window).bind('scroll', scrollMap);$(window).resize(scrollMap);scrollMap();
    } else {
      $("#map-container").css({height: Math.max($(window).height() - 44 - $("#map-anchor").offset().top, 400)});
      map.checkResize();
    }
  }
})