bgneal@312: var mmap = {
bgneal@312:    map: null,
bgneal@312:    geocoder: null,
bgneal@312:    users: Object,
bgneal@312:    userOnMap: false,
bgneal@312:    userClick: function() {
bgneal@312:       var name = $('option:selected', this).text();
bgneal@312:       if (name != mmap.selectText)
bgneal@312:       {
bgneal@312:          mmap.clickUser(name);
bgneal@312:       }
bgneal@312:    },
bgneal@312:    clickUser: function(name) {
bgneal@312:       pt = new GLatLng(mmap.users[name].lat, mmap.users[name].lon);
bgneal@312:       mmap.map.setCenter(pt);
bgneal@312:       mmap.users[name].marker.openInfoWindowHtml(mmap.users[name].message);
bgneal@312:    },
bgneal@312:    clear: function() {
bgneal@312:       mmap.users.length = 0;
bgneal@312:    },
bgneal@312:    selectText: "(select)",
bgneal@312:    onMapDir: 'You have previously added yourself to the member map. Your information appears below. You may change ' +
bgneal@312:       'the information if you wish. To delete yourself from the map, click the Delete button.',
bgneal@312:    offMapDir: 'Your location is not on the map. If you would like to appear on the map, please fill out the form below ' +
bgneal@312:       'and click the Submit button.'
bgneal@312: };
bgneal@312: $(document).ready(function() {
bgneal@312:    if (GBrowserIsCompatible())
bgneal@312:    {
bgneal@312:       $(window).unload(GUnload);
bgneal@312:       mmap.map = new GMap2($('#member_map_map')[0]);
bgneal@312:       mmap.map.setCenter(new GLatLng(15.0, -30.0), 2);
bgneal@312:       mmap.map.enableScrollWheelZoom();
bgneal@312:       mmap.map.addControl(new GLargeMapControl());
bgneal@312:       mmap.map.addControl(new GMapTypeControl());
bgneal@312:       mmap.geocoder = new GClientGeocoder();
bgneal@312: 
bgneal@312:       if (mmapUser.userName)
bgneal@312:       {
bgneal@312:          $.getJSON('/member_map/query/', 
bgneal@312:             function(data) {
bgneal@312:                mmap.map.clearOverlays();
bgneal@312:                var sel = $('#member_map_members');
bgneal@312:                sel[0].length = 0;
bgneal@312:                sel.append($('<option />').html(mmap.selectText));
bgneal@312:                mmap.clear();
bgneal@312:                $.each(data.users, function(i, item) {
bgneal@312:                   sel.append($('<option />').html(item.name));
bgneal@312:                   var marker = new GMarker(new GLatLng(item.lat, item.lon));
bgneal@312:                   marker.bindInfoWindowHtml(item.message);
bgneal@312:                   mmap.map.addOverlay(marker);
bgneal@312:                   mmap.users[item.name] = item;
bgneal@312:                   mmap.users[item.name].marker = marker;
bgneal@312:                   if (mmapUser.userName == item.name)
bgneal@312:                   {
bgneal@312:                      mmap.userOnMap = true;
bgneal@312:                   }
bgneal@312:                });
bgneal@312:                $('#member_map_count').html(data.users.length);
bgneal@312: 
bgneal@312:                sel = $('#member_map_recent');
bgneal@312:                sel[0].length = 0;
bgneal@312:                sel.append($('<option />').html(mmap.selectText));
bgneal@312:                $.each(data.recent, function(i, item) {
bgneal@312:                   sel.append($('<option />').html(item));
bgneal@312:                });
bgneal@312:                var submitButton = $('#member_map_submit');
bgneal@312:                var deleteButton = $('#member_map_delete');
bgneal@312: 
bgneal@312:                submitButton.click(function() {
bgneal@312:                   if (mmap.geocoder)
bgneal@312:                   {
bgneal@312:                      $(this).attr('disabled', 'disabled').val('Updating Map...');
bgneal@312:                      var address = $('#id_location').val();
bgneal@312:                      mmap.geocoder.getLatLng(address, 
bgneal@312:                         function(point) { 
bgneal@312:                            if (!point)
bgneal@312:                            {
bgneal@312:                               alert(address + ' could not be found on Google Maps.');
bgneal@312:                               submitButton.removeAttr('disabled').val('Update');
bgneal@312:                               return;
bgneal@312:                            }
bgneal@312:                            $.ajax({
bgneal@312:                               url: '/member_map/add/', 
bgneal@312:                               type: 'POST',
bgneal@312:                               data: {
bgneal@312:                                  loc : address,
bgneal@312:                                  lat : point.lat(),
bgneal@312:                                  lon : point.lng(),
bgneal@312:                                  msg : $('#id_message').val()
bgneal@312:                               },
bgneal@312:                               dataType: 'json',
bgneal@312:                               success: function(data, textStatus) {
bgneal@312:                                  var wasOnMap = mmap.userOnMap;
bgneal@312:                                  if (mmap.userOnMap)
bgneal@312:                                  {
bgneal@312:                                     mmap.map.removeOverlay(mmap.users[mmapUser.userName].marker);
bgneal@312:                                  }
bgneal@312:                                  else
bgneal@312:                                  {
bgneal@312:                                     $('#member_map_members').append($('<option />').html(data.name));
bgneal@312:                                     $('#member_map_recent').append($('<option />').html(data.name));
bgneal@312:                                     mmap.userOnMap = true;
bgneal@312:                                     deleteButton.removeAttr('disabled').val('Delete');
bgneal@312:                                  }
bgneal@312:                                  var marker = new GMarker(new GLatLng(data.lat, data.lon));
bgneal@312:                                  marker.bindInfoWindowHtml(data.message);
bgneal@312:                                  mmap.map.addOverlay(marker);
bgneal@312:                                  mmap.users[mmapUser.userName] = data;
bgneal@312:                                  mmap.users[mmapUser.userName].marker = marker;
bgneal@312:                                  mmap.clickUser(mmapUser.userName);
bgneal@312:                                  submitButton.removeAttr('disabled').val('Update');
bgneal@312:                                  $('#member_map_directions').html(mmap.onMapDir);
bgneal@312:                                  $('#member_map_count').html($('#member_map_members')[0].length - 1);
bgneal@312:                                  alert(wasOnMap ? "Your location has been updated!" : 
bgneal@312:                                        "You've been added to the map!");
bgneal@312:                               },
bgneal@312:                               error: function (xhr, textStatus, ex) {
bgneal@312:                                  alert('Oops, an error occurred. ' + xhr.statusText + ' - ' + 
bgneal@312:                                     xhr.responseText);
bgneal@312:                               }
bgneal@312:                            });
bgneal@312:                      });
bgneal@312:                   }
bgneal@312:                   return false;
bgneal@312:                });
bgneal@312: 
bgneal@312:                deleteButton.click(function() {
bgneal@312:                   deleteButton.attr('disabled', 'disabled').val('Deleting...');
bgneal@312:                   $.ajax({ 
bgneal@312:                      url: '/member_map/delete/', 
bgneal@312:                      type: 'POST',
bgneal@312:                      dataType: 'text',
bgneal@312:                      success: function(data, textStatus) {
bgneal@312:                         $('#id_location').val('');
bgneal@312:                         $('#id_message').val('');
bgneal@312:                         $("#member_map_members option[value='" + mmapUser.userName + "']").remove();
bgneal@312:                         $("#member_map_recent option[value='" + mmapUser.userName + "']").remove();
bgneal@312:                         mmap.map.removeOverlay(mmap.users[mmapUser.userName].marker);
bgneal@312:                         mmap.users[mmapUser.userName].marker = null;
bgneal@312:                         mmap.users[mmapUser.userName] = null;
bgneal@312:                         mmap.userOnMap = false;
bgneal@312:                         deleteButton.val('Delete');
bgneal@312:                         submitButton.removeAttr('disabled').val('Add');
bgneal@312:                         $('#member_map_directions').html(mmap.offMapDir);
bgneal@312:                         $('#member_map_count').html($('#member_map_members')[0].length - 1);
bgneal@312:                         alert("You've been removed from the map.");
bgneal@312:                      },
bgneal@312:                      error: function (xhr, textStatus, ex) {
bgneal@312:                         alert('Oops, an error occurred. ' + xhr.statusText + ' - ' + 
bgneal@312:                            xhr.responseText);
bgneal@312:                      }
bgneal@312:                   });
bgneal@312:                   return false;
bgneal@312:                });
bgneal@312:                
bgneal@312:                if (mmap.userOnMap)
bgneal@312:                {     
bgneal@312:                   submitButton.val('Update');
bgneal@312:                   $('#member_map_directions').html(mmap.onMapDir);
bgneal@312:                }
bgneal@312:                else
bgneal@312:                {
bgneal@312:                   submitButton.val('Add');
bgneal@312:                   deleteButton.attr('disabled', 'disabled');
bgneal@312:                   $('#member_map_directions').html(mmap.offMapDir);
bgneal@312:                }
bgneal@312:          });
bgneal@312:          $('#member_map_members').change(mmap.userClick);
bgneal@312:          $('#member_map_recent').change(mmap.userClick);
bgneal@312:       }
bgneal@312:    }
bgneal@312: });