Jump To …

script.js

var url = window.url || {
  settings: {
    addresses: [
      "Mohrenstr 61 Berlin", 
      "Pennsylvania Plaza, 23, Petoskey, Michigan, United States", 
      "Bulevar Nemanjića, 61, Niš, Nišava District, Serbia"
    ]
  },
  address: {},
  helpers: {},
  google: { 
    geocoder: null, 
    map: null 
  }
};;

$(document).ready(function(){
  

INITIALIZATION:

  url.helpers.googleMixin = new UrlGoogleMixin();
  url.helpers.addressFormMixin = new UrlAddressFormMixin();
  

Initialize the map

  initialize();
  

Initialize address form fields refences

  url.address.fields = {
    'country': document.getElementById('id_country'),
    'region': document.getElementById('id_region'),
    'city': document.getElementById('id_city'), 
    'zip_code': document.getElementById('id_zip_code'),
    'street': document.getElementById('id_street'),
    'street_number': document.getElementById('id_street_number')
  };

AUTOCOMPLETE COMPONENTS INITIALIZTION

Initialize Google Autocomplete fields

  var autocomplete_config = { 
      componentRestrictions: {}
    , types:["geocode"] 
  };
  url.address.autocompetes = {
    'country': new google.maps.places.Autocomplete(url.address.fields.country, autocomplete_config),
    'region': new google.maps.places.Autocomplete(url.address.fields.region, autocomplete_config),
    'city': new google.maps.places.Autocomplete(url.address.fields.city, autocomplete_config),
    'zip_code': new google.maps.places.Autocomplete(url.address.fields.zip_code, autocomplete_config),
    'street': new google.maps.places.Autocomplete(url.address.fields.street, autocomplete_config),
    'street_number': new google.maps.places.Autocomplete(url.address.fields.street_number, autocomplete_config)
  };  

Autocomplete components - registering handlers to each autocomplete compoenent

  for(var autocomplete_key in url.address.autocompetes) {
    google.maps.event.addListener(url.address.autocompetes[autocomplete_key], 'place_changed',autocomplete__place_changed__handler);
  }

LOOP THROUGH DEMO ADDRESSES

  

Loop through all default addresses - set in "url.settings.addresses" configuration!

  var i = url.settings.addresses.length;  
  var refreshId = setInterval(function() {
    if (!(i-1)) { clearInterval(refreshId); }

Set the 'Find on map' form's input to the default value from iteration (and decrement iteration)

    document.getElementById('address').value = url.settings.addresses[(i--)-1];

Position the map and set Address Form Inputs

    codeAddress();
  }, 5000);
    
});


function _updateAddressFormFieldsToAddress(address_components) {

Get serialized address

  var address = url.helpers.googleMixin.serializeAddress(address_components);
  console.log('address: ', address);

Set Address Form Fields values to new "address" values

  url.helpers.addressFormMixin.setAddressFormFieldsToAddress(address, url.address.fields);
}

function autocomplete__place_changed__handler() {
  var address, place = this.getPlace();
  
  if(!place) throw new Error('No address was found!');
console.log('place:', place);

Update Address Form Fields to new address value

  _updateAddressFormFieldsToAddress(place.address_components);  

Get full address out of Address Form Fields

  document.getElementById('address').value = url.helpers.addressFormMixin.generateFullAddress();

Position the map to full address that was constructed

  document.getElementById('find-on-map-btn').click();
}

Initialize Google Map

function initialize() {
  url.google.geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var myOptions = {
    zoom: 15,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  url.google.map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

Geocode Address from 'address' field and show it on the map.

function codeAddress() {
  var address = document.getElementById("address").value;

  url.google.geocoder.geocode( { 'address': address}, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {
      url.google.map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
          map: url.google.map, 
          position: results[0].geometry.location
      });
      

Update Address Form Fields to new address value

      _updateAddressFormFieldsToAddress(results[0].address_components);
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
    return false;
  });
}