/**
* @namespace WPGMZA
* @module GoogleMarker
* @requires WPGMZA.Marker
* @pro-requires WPGMZA.ProMarker
*/
(function($) {
var Parent;
WPGMZA.GoogleMarker = function(row)
{
var self = this;
Parent.call(this, row);
this.googleMarker = new google.maps.Marker(/*this.settings*/);
this.googleMarker.wpgmzaMarker = this;
this.googleMarker.setPosition(new google.maps.LatLng({
lat: parseFloat(this.lat),
lng: parseFloat(this.lng)
}));
this.googleMarker.setLabel(this.settings.label);
if(this.animation)
this.googleMarker.setAnimation(this.animation);
google.maps.event.addListener(this.googleMarker, "click", function() {
self.dispatchEvent("click");
self.dispatchEvent("select");
});
google.maps.event.addListener(this.googleMarker, "mouseover", function() {
self.dispatchEvent("mouseover");
});
google.maps.event.addListener(this.googleMarker, "dragend", function() {
var googleMarkerPosition = self.googleMarker.getPosition();
self.setPosition({
lat: googleMarkerPosition.lat(),
lng: googleMarkerPosition.lng()
});
self.dispatchEvent("dragend");
});
this.trigger("init");
}
if(WPGMZA.isProVersion())
Parent = WPGMZA.ProMarker;
else
Parent = WPGMZA.Marker;
WPGMZA.GoogleMarker.prototype = Object.create(Parent.prototype);
WPGMZA.GoogleMarker.prototype.constructor = WPGMZA.GoogleMarker;
WPGMZA.GoogleMarker.prototype.setLabel = function(label)
{
if(!label)
{
this.googleMarker.setLabel(null);
return;
}
this.googleMarker.setLabel({
text: label
});
if(!this.googleMarker.getIcon())
this.googleMarker.setIcon(WPGMZA.settings.default_marker_icon);
}
/**
* Sets the position of the marker
* @return void
*/
WPGMZA.GoogleMarker.prototype.setPosition = function(latLng)
{
Parent.prototype.setPosition.call(this, latLng);
this.googleMarker.setPosition({
lat: this.lat,
lng: this.lng
});
}
/**
* Sets the position offset of a marker
* @return void
*/
WPGMZA.GoogleMarker.prototype.setOffset = function(x, y)
{
var self = this;
var icon = this.googleMarker.getIcon();
var img = new Image();
var params;
if(typeof icon == "string")
params = {
url: icon
};
else
params = icon;
img.onload = function()
{
var defaultAnchor = {
x: img.width / 2,
y: img.height
};
params.anchor = new google.maps.Point(defaultAnchor.x - x, defaultAnchor.y - y);
self.googleMarker.setIcon(params);
}
img.src = params.url;
}
/**
* Set the marker animation
* @return void
*/
WPGMZA.GoogleMarker.prototype.setAnimation = function(animation)
{
Parent.prototype.setAnimation.call(this, animation);
this.googleMarker.setAnimation(animation);
}
/**
* Sets the visibility of the marker
* @return void
*/
WPGMZA.GoogleMarker.prototype.setVisible = function(visible)
{
Parent.prototype.setVisible.call(this, visible);
this.googleMarker.setVisible(visible);
}
WPGMZA.GoogleMarker.prototype.setDraggable = function(draggable)
{
this.googleMarker.setDraggable(draggable);
}
})(jQuery);