app/soc/content/js/templates/soc/role/edit-091027.js
author Mario Ferraro <fadinlight@gmail.com>
Sun, 15 Nov 2009 22:12:20 +0100
changeset 3093 d1be59b6b627
permissions -rw-r--r--
GMaps related JS changed to use new google namespace. Google is going to change permanently in the future the way to load its services, so better stay safe. Also this commit shows uses of the new melange.js module. Fixes Issue 634.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3093
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     1
/* Copyright 2009 the Melange authors.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     2
 *
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     3
 * Licensed under the Apache License, Version 2.0 (the "License");
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     4
 * you may not use this file except in compliance with the License.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     5
 * You may obtain a copy of the License at
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     6
 *
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     7
 *   http://www.apache.org/licenses/LICENSE-2.0
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     8
 *
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
     9
 * Unless required by applicable law or agreed to in writing, software
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    10
 * distributed under the License is distributed on an "AS IS" BASIS,
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    11
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    12
 * See the License for the specific language governing permissions and
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    13
 * limitations under the License.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    14
 */
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    15
/**
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    16
 * @author <a href="mailto:fadinlight@gmail.com">Mario Ferraro</a>
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    17
 */
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    18
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    19
(function () {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    20
  var melange = window.melange;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    21
  this.prototype = new melange.templates._baseTemplate();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    22
  this.prototype.constructor = melange.templates._baseTemplate;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    23
  melange.templates._baseTemplate.apply(this, arguments);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    24
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    25
  var _self = this;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    26
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    27
  // Create global variables
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    28
  var map;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    29
  var marker;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    30
  var geocoder;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    31
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    32
  // The following strings can be customized to reflect ids in the page.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    33
  // You can also add or remove fields used for GMap Geocoding in 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    34
  // the JSON address object
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    35
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    36
  var current_lat = 0;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    37
  var current_lng = 0;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    38
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    39
  // Two different levels for zoom: Starting one and an inner that 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    40
  // is used when showing the map if lat and lon page fields are set
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    41
  var world_zoom = 0;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    42
  var country_zoom = 4;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    43
  var state_zoom = 6;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    44
  var city_zoom = 10;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    45
  var address_zoom = 13;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    46
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    47
  // Do not add a starting # as this JQuery selector seems 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    48
  // incompatible with GMap API
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    49
  var map_div = "role_profile_map";
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    50
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    51
  var field_lat = "#id_latitude";
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    52
  var field_lng = "#id_longitude";
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    53
  // Need to save old values to avoid unwanted updating 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    54
  // of lat and lot if marker dragged and blur another time an address field
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    55
  var address = {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    56
    street: {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    57
      id: "#id_res_street",
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    58
      old_value: ""
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    59
    },
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    60
    city: {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    61
      id: "#id_res_city",
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    62
      old_value: ""
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    63
    },
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    64
    state: {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    65
      id: "#id_res_state",
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    66
      old_value: ""
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    67
    },
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    68
    country: {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    69
      id: "#id_res_country",
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    70
      old_value: ""
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    71
    },
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    72
    postalcode: {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    73
      id: "#id_res_postalcode",
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    74
      old_value: ""
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    75
    }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    76
  };
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    77
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    78
  // Save current address fields in the JSON Object
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    79
  function saveOldAddress() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    80
    jQuery.each(address, function (level, level_details) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    81
      level_details.old_value = jQuery(level_details.id).val();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    82
    });
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    83
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    84
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    85
  // Return true if the user has edited address fields
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    86
  function isNewAddress() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    87
    var is_new = false;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    88
    jQuery.each(address, function (level, level_details) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    89
      if (jQuery(level_details.id).val() !== level_details.old_value) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    90
        is_new = true;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    91
        return false;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    92
      }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    93
    });
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    94
    return is_new;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    95
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    96
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    97
  // Write saved lat and lng values to page fields
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    98
  function setLatLngFields() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
    99
    jQuery(field_lat).val(current_lat);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   100
    jQuery(field_lng).val(current_lng);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   101
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   102
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   103
  // Read lat and lng fields and store them
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   104
  function readLatLngFields() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   105
    current_lat = jQuery(field_lat).val();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   106
    current_lng = jQuery(field_lng).val();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   107
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   108
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   109
  // This function reads address fields, merge them and uses
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   110
  // GMap API geocoding to find the first hit
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   111
  // Using geocoding
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   112
  // http://code.google.com/intl/it-IT/apis/maps/documentation/
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   113
  // services.html#Geocoding
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   114
  function calculateAddress() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   115
    // If the user has really edited address fields...
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   116
    if (isNewAddress()) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   117
      // Merge address fields
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   118
      var address_string = "";
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   119
      jQuery.each(address, function (level, level_details) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   120
        address_string += jQuery(level_details.id).val() + ",";
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   121
      });
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   122
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   123
      // Ask GMap API for geocoding
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   124
      geocoder.getLatLng(
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   125
        address_string,
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   126
        function (point) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   127
          // If a point is found
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   128
          if (point) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   129
            // Save the current address in the JSON object
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   130
            saveOldAddress();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   131
            // Set the new zoom, map center and marker coords
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   132
            var zoom_set = world_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   133
            if (jQuery(address.street.id).val() !== "") {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   134
              zoom_set = address_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   135
            }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   136
            else if (jQuery(address.city.id).val() !== "") {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   137
              zoom_set = city_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   138
            }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   139
            else if (jQuery(address.state.id).val() !== "") {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   140
              zoom_set = state_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   141
            }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   142
            else if (jQuery(address.country.id).val() !== "") {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   143
              zoom_set = country_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   144
            }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   145
            map.setCenter(point, zoom_set);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   146
            marker.setPoint(point);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   147
            map.clearOverlays();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   148
            map.addOverlay(marker);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   149
            // Save point coords in local variables and then update 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   150
            // the page lat/lng fields
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   151
            current_lat = point.lat();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   152
            current_lng = point.lng();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   153
            setLatLngFields();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   154
          }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   155
        }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   156
      );
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   157
    }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   158
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   159
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   160
  // Public function to load the map
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   161
  function map_load() {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   162
    // All can happen only if there is gmap compatible browser.
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   163
    // TODO: Fallback in case the browser is not compatible
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   164
    if (google.maps.BrowserIsCompatible()) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   165
      // Save the address fields. This is useful if the page is being edited
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   166
      // to not update blindly the lat/lng fields with GMap geocoding if
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   167
      // blurring an address field
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   168
      saveOldAddress();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   169
      var starting_point;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   170
      var zoom_selected = world_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   171
      var show_marker = true;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   172
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   173
      // Create the map and add small controls
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   174
      map = new google.maps.Map2(document.getElementById(map_div));
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   175
      map.addControl(new google.maps.SmallMapControl());
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   176
      map.addControl(new google.maps.MapTypeControl());
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   177
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   178
      // Instantiate a global geocoder for future use
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   179
      geocoder = new google.maps.ClientGeocoder();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   180
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   181
      // If lat and lng fields are not void (the page is being edited) then
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   182
      // update the starting coords, modify the zoom level and tells following
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   183
      // code to show the marker
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   184
      if (jQuery(field_lat).val() !== "" && jQuery(field_lng).val() !== "") {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   185
        readLatLngFields();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   186
        zoom_selected = address_zoom;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   187
        show_marker = true;
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   188
      }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   189
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   190
      // Set map center, marker coords and show it if this is an editing
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   191
      starting_point = new google.maps.LatLng(current_lat, current_lng);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   192
      map.setCenter(starting_point, zoom_selected);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   193
      marker = new google.maps.Marker(starting_point, {draggable: true});
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   194
      if (show_marker) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   195
        map.addOverlay(marker);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   196
      }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   197
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   198
      // Adds a new event listener to geocode the address when an address 
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   199
      // field is blurred
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   200
      jQuery.each(address, function (level, level_details) {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   201
        jQuery(level_details.id).blur(calculateAddress);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   202
      });
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   203
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   204
      // Adds a new event listener: if the marker has been dragged around...
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   205
      google.maps.Event.addListener(marker, "dragend", function () {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   206
        // Update internal variables with current marker coords...
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   207
        current_lat = marker.getPoint().lat();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   208
        current_lng = marker.getPoint().lng();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   209
        // ...and set page fields accordingly
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   210
        setLatLngFields();
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   211
      });
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   212
    }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   213
  }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   214
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   215
  jQuery(
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   216
    function () {
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   217
      melange.loadGoogleApi("maps", "2", {}, map_load);
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   218
    }
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   219
  );
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   220
d1be59b6b627 GMaps related JS changed to use new google namespace.
Mario Ferraro <fadinlight@gmail.com>
parents:
diff changeset
   221
}());