Source: google-maps/google-marker.js

/**

 * @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);