var gmapsIsLoaded = false; Hedera.Location = new Class ({ Extends: Hedera.Form ,locations: null ,activate: function () { this.gui.loaderPush (); var sql = 'SELECT lat, lng, title, address, postcode, city, province, phone, language FROM location'; this.conn.execQuery (sql, this.onLocationsDone.bind (this)); if (!gmapsIsLoaded) { gmapsLoadedCallback = this.gmapsLoaded.bind (this); Vn.includeJs ('https://maps.google.com/maps/api/js'+ '?sensor=false&callback=gmapsLoadedCallback', null, true); } else this.gmapsLoaded (); } ,onLocationsDone: function (resultSet) { this.locations = resultSet.fetchResult (); this.allLoaded (); } ,gmapsLoaded: function () { this.gui.loaderPop (); gmapsIsLoaded = true; this.allLoaded (); } ,allLoaded: function () { if (!this.locations || !gmapsIsLoaded) return; var options = { zoom: 4 ,mapTypeId: google.maps.MapTypeId.ROADMAP ,center: new google.maps.LatLng (46.0, 4.0) }; var div = this.$('form'); var gmap = new google.maps.Map (div, options); var row; while (row = this.locations.fetchObject ()) this.createMarker (row, gmap); } ,createMarker: function (row, gmap) { var div = document.createElement ('div'); div.className = 'marker'; var h = document.createElement ('h3'); h.appendChild (document.createTextNode (row.title)); div.appendChild (h); var p = document.createElement ('p'); p.appendChild (document.createTextNode (row.address)); div.appendChild (p); var p = document.createElement ('p'); p.appendChild (document.createTextNode (row.postcode +' '+ row.city)); div.appendChild (p); var p = document.createElement ('p'); p.appendChild (document.createTextNode (row.province)); div.appendChild (p); var p = document.createElement ('p'); p.appendChild (document.createTextNode (row.phone)); div.appendChild (p); var lat = new google.maps.LatLng ( row.lat, row.lng ); var marker = new google.maps.Marker ({ position: lat ,tilte: location.title ,map: gmap }); var infoWindow = new google.maps.InfoWindow ({ content: div }); google.maps.event.addListener (marker, 'click', this.openInfoWindow.bind (this, infoWindow, gmap, marker)); if (Vn.Locale.language && Vn.Locale.language == row.language) this.openInfoWindow (infoWindow, gmap, marker); } ,openInfoWindow: function (infoWindow, gmap, marker) { if (this.openedWindow) this.openedWindow.close (); infoWindow.open (gmap, marker); this.openedWindow = infoWindow; } });