(function() { (function(jQuery) { return jQuery.widget('Yavsc.geocode', { geocoder:null, gmap:null, combo:null, inputLatitude:null, inputLongitude:null, marker:null, options: { disabled: false, map: 'map', start: { lat: -34.397, lng: 150.644 }, zoom: 16, btngeoloc: null, combo: 'Location_combo', inputLatitude: 'Location_Longitude', inputLongitude: 'Location_Latitude', onValidated: null, onProposalClicked: null }, onBlur: function() { this.geocodeAddress(); }, geocodeAddress: function () { var validation = this.options.onValidated; var _this = this; var $input = $(this.element); var address = $input.val(); $input.data("isRequesting", true); $input.data("validPlaceId", false); _this.geocoder.geocode({'address': address}, function(results, status) { if (status === google.maps.GeocoderStatus.OK) { var firstres = results[0]; var pos = firstres.geometry.location; if (_this.combo) { var $combo = $(_this.combo); $combo.html(""); if (results.length>1) { results.forEach(function(element) { $('
  • '+element.formatted_address+'
  • ') .click( function() { $(_this.element).val($(this).text()); if (_this.options.onProposalClicked) _this.options.onProposalClicked(); } ) .appendTo($combo); },this); } } if (_this.marker) {  _this.marker.setMap(null); _this.marker = null; } if (results.length==1) { $(_this.element).val(firstres.formatted_address); _this.gmap.setCenter(pos); _this.marker = new google.maps.Marker({ map: _this.gmap, draggable: true, animation: google.maps.Animation.DROP, position: pos }); if (_this.inputLatitude) _this.inputLatitude.value=pos.lat; if (_this.inputLongitude) _this.inputLongitude.value = pos.lng; if (validation) validation({results:results,success:true}); $input.data("validPlaceId", true); $input.data("isRequesting", false); if (validation) validation({success:true,status: status}); return; } } if (validation) validation({success:false,status: status}); $input.data("isRequesting", false); } ); }, _create: function() { var _this = this; var $input = $(this.element); if (!_this.options.disabled) { _this.combo = document.getElementById(this.options.combo); _this.gmap = new google.maps.Map(document.getElementById(_this.options.map), { zoom: _this.options.zoom, center: _this.options.start }); if (_this.options.inputLatitude) _this.inputLatitude = document.getElementById(_this.options.inputLatitude); if (_this.options.inputLongitude) _this.inputLongitude = document.getElementById(_this.options.inputLongitude); this.geocoder = new google.maps.Geocoder(); var btn = document.getElementById(_this.options.btngeoloc); if (btn) { btn.click( function() { _this.geocodeAddress(); }); btn.disabled = false; } $input.on('blur',function() {_this.onBlur(); }); }}, getDistance: function(lat1,lon1,lat2,lon2){ var R = 6371; // Earth's radius in Km return Math.acos(Math.sin(lat1)*Math.sin(lat2) + Math.cos(lat1)*Math.cos(lat2) * Math.cos(lon2-lon1)) * R; } }); })(jQuery); }).call(this);