# 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);