bgneal@821: var bandmap = null;
bgneal@821: var geocoder = null;
bgneal@827: var surfbands = [];
bgneal@827: var map_options = {
bgneal@827:    center: {lat: 15.0, lng: -30.0},
bgneal@827:    zoom: 2
bgneal@827: };
bgneal@827: var info_win = null;
bgneal@821: 
bgneal@821: function addBandOnSubmit(event) {
bgneal@821:    var location = $('#id_location').val();
bgneal@821:    if (!location) {
bgneal@821:       alert("Please enter a location");
bgneal@821:       return false;
bgneal@821:    }
bgneal@821:    var button = $(this);
bgneal@821:    button.attr('disabled', 'disabled');
bgneal@821:    var form = $('#bandmap-add-form');
bgneal@821:    geocoder.geocode({'address': location}, function(results, status) {
bgneal@821:       button.removeAttr('disabled');
bgneal@821:       if (status == google.maps.GeocoderStatus.OK) {
bgneal@821:          $('#id_lat').val(results[0].geometry.location.lat().toString());
bgneal@821:          $('#id_lon').val(results[0].geometry.location.lng().toString());
bgneal@821:          $(form).submit();
bgneal@821:       }
bgneal@821:       else {
bgneal@821:          var msg = "Geocode unsuccessful: " + status + "\n" +
bgneal@821:             "Enter a new location";
bgneal@821:          alert(msg);
bgneal@821:       }
bgneal@821:    });
bgneal@821:    return false;
bgneal@821: }
bgneal@821: 
bgneal@827: 
bgneal@827: function refreshMap() {
bgneal@827:    bandmap.setOptions(map_options);
bgneal@827:    $.each(surfbands, function(i, band) {
bgneal@827:       band.marker.setMap(null);
bgneal@827:    });
bgneal@827:    surfbands.length = 0;
bgneal@827:    var band_sel = $('#map-bands');
bgneal@827:    band_sel[0].length = 0;
bgneal@827:    band_sel.append($('<option>', {value: -1}).html('(select)'));
bgneal@827:    var count_span = $('#map-band-count');
bgneal@827:    count_span.html('0');
bgneal@827:    var filter = $('#map-filter option:selected').val();
bgneal@827: 
bgneal@827:    $.getJSON('/bandmap/query/', {show: filter},
bgneal@827:          function(data) {
bgneal@827:             $.each(data, function(i, band) {
bgneal@827:                band_sel.append($('<option>', {value: i, text: band.name}));
bgneal@827:                var marker = new google.maps.Marker({
bgneal@827:                   position: {lat: band.lat, lng: band.lon},
bgneal@827:                   title: band.name,
bgneal@830:                   icon: band.is_active ? "http://maps.google.com/mapfiles/ms/icons/green-dot.png"
bgneal@830:                                        : "http://maps.google.com/mapfiles/ms/icons/red-dot.png",
bgneal@827:                   map: bandmap
bgneal@827:                });
bgneal@827:                google.maps.event.addListener(marker, 'click', function() {
bgneal@827:                   info_win.setContent(band.note);
bgneal@827:                   info_win.open(bandmap, marker);
bgneal@827:                });
bgneal@827:                surfbands[i] = band;
bgneal@827:                surfbands[i].marker = marker;
bgneal@827:             });
bgneal@827:             count_span.html(data.length);
bgneal@827:          });
bgneal@827: }
bgneal@827: 
bgneal@820: $(document).ready(function() {
bgneal@820:    var map_div = $('#map-canvas');
bgneal@820:    if (map_div.length) {
bgneal@821:       bandmap = new google.maps.Map(map_div[0], map_options);
bgneal@832:       info_win = new google.maps.InfoWindow({maxWidth: 300});
bgneal@827:       $('#map-filter-go').click(refreshMap);
bgneal@827:       $('#map-bands').change(function() {
bgneal@827:          var n = $('option:selected', this).val();
bgneal@827:          if (n != -1) {
bgneal@827:             info_win.setContent(surfbands[n].note);
bgneal@827:             info_win.open(bandmap, surfbands[n].marker);
bgneal@827:          }
bgneal@827:       });
bgneal@827:       refreshMap();
bgneal@820:    }
bgneal@820: 
bgneal@820:    var add_form = $('#bandmap-add-form');
bgneal@820:    if (add_form.length) {
bgneal@821:       geocoder = new google.maps.Geocoder();
bgneal@821:       $('#bandmap-add-submit').click(addBandOnSubmit);
bgneal@820:    }
bgneal@820: });