$(function() { var latlng = new google.maps.LatLng(42.358431, -71.059773); var myOptions = { mapTypeControl: false, scaleControl: true, scaleControlOptions: { position: google.maps.ControlPosition.BOTTOM_CENTER }, zoom: 15, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); var activeHydrantId; var activeMarker; var activeInfoWindow; function addMarker(hydrantId, point, color) { var image = new google.maps.MarkerImage(color, new google.maps.Size(27.0, 37.0), new google.maps.Point(0, 0), new google.maps.Point(13.0, 18.0) ); var shadow = new google.maps.MarkerImage('/images/markers/shadow.png', new google.maps.Size(46.0, 37.0), new google.maps.Point(0, 0), new google.maps.Point(13.0, 18.0) ); var marker = new google.maps.Marker({ position: point, map: map, icon: image, shadow: shadow }); google.maps.event.addListener(marker, 'click', function() { if(activeInfoWindow) { activeInfoWindow.close(); } $.get('<%= forms_path %>', { 'hydrant_id': hydrantId }, function(data) { var infoWindow = new google.maps.InfoWindow({ content: data, maxWidth: 350 }); infoWindow.open(map, marker); activeHydrantId = hydrantId; activeMarker = marker; activeInfoWindow = infoWindow; }); }); } $('#location_form').submit(function() { if($('#address').val() === '') { $('#address_label').addClass('error', 500); $('#address').addClass('error', 500); $('#address').focus(); } else { $.get('<%= address_path :format => "json" %>', { 'commit': $('#location_submit').val(), 'utf8': '✓', 'authenticity_token': $('#location_form input[name="authenticity_token"]').val(), 'city_state': $('#city_state').val(), 'address': $('#address').val() }, function(data) { if(data.errors) { $('#address_label').addClass('error', 500); $('#address').addClass('error', 500); $('#address').focus(); } else { map.setZoom(18); latlng = new google.maps.LatLng(data[0], data[1]); map.setCenter(latlng); $.get('<%= hydrants_path :format => "json" %>', { 'commit': $('#location_submit').val(), 'utf8': '✓', 'authenticity_token': $('#location_form input[name="authenticity_token"]').val(), 'lat': data[0], 'lng': data[1] }, function(data) { // This should never happen, but just in case if(data.errors) { $('#address_label').addClass('error', 500); $('#address').addClass('error', 500); $('#address').focus(); } else { $(data).each(function(index, hydrant) { hydrant = hydrant.hydrant; point = new google.maps.LatLng(hydrant.lat, hydrant.lng); color = '/images/markers/' + (hydrant.user_id ? "green" : "red") + '.png'; addMarker(hydrant.id, point, color); }); } }); } }); } return false; }); $('#combo_form input[type="radio"]').live('click', function() { var self = $(this); if('new' == self.val()) { $('#user_forgot_password_fields').slideUp(); $('#user_sign_in_fields').slideUp(); $('#user_sign_up_fields').slideDown(); $('#combo_form').data('state', 'user_sign_up'); } else if('existing' == self.val()) { $('#user_sign_up_fields').slideUp(); $('#user_sign_in_fields').slideDown(function() { $('#combo_form').data('state', 'user_sign_in'); $('#user_forgot_password_link').click(function() { $('#user_sign_in_fields').slideUp(); $('#user_forgot_password_fields').slideDown(function() { $('#user_remembered_password').click(function() { $('#user_forgot_password_fields').slideUp(); $('#user_sign_in_fields').slideDown(); $('#combo_form').data('state', 'user_sign_in'); }); }); $('#combo_form').data('state', 'user_forgot_password'); }); }); } }); $('#combo_form').live('submit', function() { var errors = [] if(!/[\w\.%\+\]+@[\w\]+\.+[\w]{2,}/.test($('#user_email').val())) { errors.push($('#user_email')); $('#user_email_label').addClass('error', 500); $('#user_email').addClass('error', 500); } else { $('#user_email_label').removeClass('error'); $('#user_email').removeClass('error'); } if(!$(this).data('state') || $(this).data('state') === 'user_sign_up') { if($('#user_name').val() === '') { errors.push($('#user_name')); $('#user_name_label').addClass('error', 500); $('#user_name').addClass('error', 500); } else { $('#user_name_label').removeClass('error'); $('#user_name').removeClass('error'); } if($('#user_password_confirmation').val().length < 6 || $('#user_password_confirmation').val().length > 20) { errors.push($('#user_password_confirmation')); $('#user_password_confirmation_label').addClass('error', 500); $('#user_password_confirmation').addClass('error', 500); } else { $('#user_password_confirmation_label').removeClass('error'); $('#user_password_confirmation').removeClass('error'); } if(errors.length > 0) { errors[0].focus(); } else { $.post('<%= user_registration_path :format => "json" %>', { 'commit': $('#user_sign_up_submit').val(), 'utf8': '✓', 'authenticity_token': $('input[name="authenticity_token"]').val(), 'user': { 'email': $('#user_email').val(), 'name': $('#user_name').val(), 'organization': $('#user_organization').val(), 'voice_number': $('#user_voice_number').val(), 'sms_number': $('#user_sms_number').val(), 'password': $('#user_password_confirmation').val(), 'password_confirmation': $('#user_password_confirmation').val() } }, function(data) { if(data.errors) { if(data.errors.email) { errors.push($('#user_email')); $('#user_email_label').addClass('error', 500); $('#user_email').addClass('error', 500); } if(data.errors.name) { errors.push($('#user_name')); $('#user_name_label').addClass('error', 500); $('#user_name').addClass('error', 500); } if(data.errors.organization) { errors.push($('#user_organization')); $('#user_organization_label').addClass('error', 500); $('#user_organization').addClass('error', 500); } if(data.errors.voice_number) { errors.push($('#user_voice_number')); $('#user_voice_number_label').addClass('error', 500); $('#user_voice_number').addClass('error', 500); } if(data.errors.sms_number) { errors.push($('#user_sms_number')); $('#user_sms_number_label').addClass('error', 500); $('#user_sms_number').addClass('error', 500); } if(data.errors.password) { errors.push($('#user_password_confirmation')); $('#user_password_confirmation_label').addClass('error', 500); $('#user_password_confirmation').addClass('error', 500); } errors[0].focus(); } else { $.get('<%= forms_path %>', { 'hydrant_id': activeHydrantId }, function(data) { activeInfoWindow.setContent(data); }); } }); } } else if($(this).data('state') === 'user_sign_in') { if($('#user_password').val().length < 6 || $('#user_password').val().length > 20) { errors.push($('#user_password')); $('#user_password_label').addClass('error', 500); $('#user_password').addClass('error', 500); } else { $('#user_password_label').removeClass('error'); $('#user_password').removeClass('error'); } if(errors.length > 0) { errors[0].focus(); } else { $.post('<%= user_session_path :format => "json" %>', { 'commit': $('#user_sign_in_submit').val(), 'utf8': '✓', 'authenticity_token': $('input[name="authenticity_token"]').val(), 'user': { 'email': $('#user_email').val(), 'password': $('#user_password').val(), 'remember_me': $('#user_remember_me').val() } }, function(data) { if(data.errors) { $('#user_password_label').addClass('error', 500); $('#user_password').addClass('error', 500); $('#user_password').focus(); } else { $.get('<%= forms_path %>', { 'hydrant_id': activeHydrantId }, function(data) { activeInfoWindow.setContent(data); }); } }); } } else if($(this).data('state') === 'user_forgot_password') { if(errors.length > 0) { errors[0].focus(); } else { $.post('<%= user_password_path :format => "json" %>', { 'commit': $('#user_forgot_password_submit').val(), 'utf8': '✓', 'authenticity_token': $('input[name="authenticity_token"]').val(), 'user': { 'email': $('#user_email').val() } }, function(data) { if(data.errors) { $('#user_email_label').addClass('error', 500); $('#user_email').addClass('error', 500); $('#user_email').focus(); } else { $('#user_forgot_password_fields').slideUp(); $('#user_sign_in_fields').slideDown(); } }); } } return false; }); $('#adoption_form').live('submit', function() { $.post('<%= hydrant_path :format => "json" %>', { 'id': $('#hydrant_id').val(), 'commit': $('#adoption_form_submit').val(), 'utf8': '✓', 'authenticity_token': $('input[name="authenticity_token"]').val(), '_method': 'put', 'hydrant': { 'user_id': $('#hydrant_user_id').val(), 'name': $('#hydrant_name').val() } }, function(data) { $.get('<%= forms_path %>', { 'hydrant_id': activeHydrantId }, function(data) { activeInfoWindow.setContent(data); image = new google.maps.MarkerImage('/images/markers/green.png', new google.maps.Size(27.0, 37.0), new google.maps.Point(0, 0), new google.maps.Point(13.0, 18.0) ); activeMarker.setIcon(image); activeMarker.setAnimation(google.maps.Animation.BOUNCE); }); }); return false; }); });