var eventorganiserMapsAdapter=eventorganiserMapsAdapter||{};
eventorganiserMapsAdapter.googlemaps=eventorganiserMapsAdapter.googlemaps||{};
eventorganiserMapsAdapter.provider=eventorganiserMapsAdapter.googlemaps;
eventorganiserMapsAdapter.googlemaps.map=function(elementID, args){
this.elementID=elementID;
this.args=args;
var mapArgs={
zoom: args.zoom,
scrollwheel: args.scrollwheel,
zoomControl: args.zoomcontrol,
rotateControl: args.rotatecontrol,
panControl: args.pancontrol,
overviewMapControl: args.overviewmapcontrol,
streetViewControl: args.streetviewcontrol,
draggable: args.draggable,
mapTypeControl: args.maptypecontrol,
mapTypeId: google.maps.MapTypeId[args.maptypeid],
styles: args.styles,
minZoom: args.minzoom,
maxZoom: args.maxzoom,
};
mapArgs=wp.hooks.applyFilters('eventorganiser.google_map_options', mapArgs, this.args)
this._markers={};
this._map=new google.maps.Map(document.getElementById(this.elementID), mapArgs);
if(typeof this.setCenter!=="function"){
eventorganiserMapsAdapter.googlemaps.map.prototype.setCenter=function(location){
this._map.setCenter({ lat: parseFloat(location.lat), lng: parseFloat(location.lng) });
};
eventorganiserMapsAdapter.googlemaps.map.prototype.setZoom=function(zoom){
this._map.setZoom(zoom);
};
eventorganiserMapsAdapter.googlemaps.map.prototype.fitLocations=function(locations){
var bounds=new google.maps.LatLngBounds();
for(var j=0; j < locations.length; j++){
var latlng={ lat: parseFloat(locations[j].lat), lng: parseFloat(locations[j].lng) };
bounds.extend(latlng);
}
this._map.fitBounds(bounds);
};
eventorganiserMapsAdapter.googlemaps.map.prototype.addMarker=function(location){
location.map=this;
var marker=new eventorganiserMapsAdapter.googlemaps.marker(location);
this._markers[location.venue_id]=marker;
return marker;
};}
if(this.args.locations.length > 1){
this.fitLocations(this.args.locations);
}else if(this.args.locations.length > 0){
this.setCenter(this.args.locations[0]);
}
wp.hooks.doAction('eventorganiser.google_map_loaded', this);
};
eventorganiserMapsAdapter.googlemaps.marker=function(args){
this.map=args.map;
var marker_options=jQuery.extend({}, args, {
venue_id: args.venue_id,
position: { lat: parseFloat(args.position.lat), lng: parseFloat(args.position.lng) },
icon: args.icon,
map: this.map._map
});
if(!marker_options['icon']){
delete marker_options['icon']
}
this._marker=new google.maps.Marker(marker_options);
if(args.tooltipContent){
var infowindow=new google.maps.InfoWindow({
content: marker_options.tooltipContent
});
var _marker=this._marker;
google.maps.event.addListener(this._marker, 'click', function(){
if(this.map.openWindow){
this.map.openWindow.close();
}
this.map.openWindow=infowindow;
infowindow.open(marker_options.map, _marker);
});
}
var proxiedCallbacks={};
var mapAdapter=this.map;
if(typeof this.setPosition!=="function"){
eventorganiserMapsAdapter.googlemaps.marker.prototype.setPosition=function(latLng){
this._marker.setPosition(latLng);
};
eventorganiserMapsAdapter.googlemaps.marker.prototype.getPosition=function(latLng){
let position=this._marker.getPosition();
return {lat: position.lat(), lng: position.lng()}};
eventorganiserMapsAdapter.googlemaps.marker.prototype.remove=function(){
this._marker.setMap(null);
};
eventorganiserMapsAdapter.googlemaps.marker.prototype.setIcon=function(url){
this._marker.setIcon(url);
};
eventorganiserMapsAdapter.googlemaps.marker.prototype.on=function(eventName, callback){
var eventNameMapped;
switch(eventName){
case 'move':
eventNameMapped='position_changed';
break;
default:
eventNameMapped=eventName;
}
proxiedCallbacks[eventNameMapped]=callback;
google.maps.event.addListener(this._marker, eventNameMapped, function(evt){
var callback=proxiedCallbacks[eventNameMapped];
var proxyEvt={
_evt: evt,
type: eventName,
target: {
map: mapAdapter,
latlng: {}}
}
if(! evt||typeof evt.latLng==undefined){
var latLng=this.getPosition();
}else{
var latLng=evt.latLng;
}
proxyEvt.target.latlng={
lat: latLng.lat().toFixed(6),
lng: latLng.lng().toFixed(6)
}
callback.call(mapAdapter, proxyEvt);
});
}}
}
eventorganiserMapsAdapter.googlemaps.geocoder=function(){
this._geocoder=new google.maps.Geocoder();
if(typeof this.geocode!=="function"){
eventorganiserMapsAdapter.googlemaps.geocoder.prototype.geocode=function(address, callback){
var addressString="";
for (var i in address){
addressString +=address[i] + ", ";
}
this._geocoder.geocode({ 'address': addressString},
function (results, status){
if(status==google.maps.GeocoderStatus.OK){
callback.call(this, {
lat: results[0].geometry.location.lat(),
lng: results[0].geometry.location.lng()
});
}else{
return callback.call(this, false);
}}
);
};}};