Source: google-maps/google-polygon.js

/**

 * @namespace WPGMZA

 * @module GooglePolygon

 * @requires WPGMZA.Polygon

 * @pro-requires WPGMZA.ProPolygon

 */

(function($) {

	

	var Parent;

	

	WPGMZA.GooglePolygon = function(row, googlePolygon)

	{

		var self = this;

		

		Parent.call(this, row, googlePolygon);

		

		if(googlePolygon)

		{

			this.googlePolygon = googlePolygon;

		}

		else

		{

			this.googlePolygon = new google.maps.Polygon(this.settings);

			

			if(row && row.points)

			{

				var paths = this.parseGeometry(row.points);

				this.googlePolygon.setOptions({paths: paths});

			}

		}

		

		this.googlePolygon.wpgmzaPolygon = this;

			

		google.maps.event.addListener(this.googlePolygon, "click", function() {

			self.dispatchEvent({type: "click"});

		});

	}

	

	if(WPGMZA.isProVersion())

		Parent = WPGMZA.ProPolygon;

	else

		Parent = WPGMZA.Polygon;

		

	WPGMZA.GooglePolygon.prototype = Object.create(Parent.prototype);

	WPGMZA.GooglePolygon.prototype.constructor = WPGMZA.GooglePolygon;

	

	/**

	 * Returns true if the polygon is editable

	 * @return void

	 */

	WPGMZA.GooglePolygon.prototype.getEditable = function()

	{

		return this.googlePolygon.getOptions().editable;

	}

	

	/**

	 * Sets the editable state of the polygon

	 * @return void

	 */

	WPGMZA.GooglePolygon.prototype.setEditable = function(value)

	{

		this.googlePolygon.setOptions({editable: value});

	}

	

	/**

	 * Returns the polygon represented by a JSON object

	 * @return object

	 */

	WPGMZA.GooglePolygon.prototype.toJSON = function()

	{

		var result = WPGMZA.Polygon.prototype.toJSON.call(this);

		

		result.points = [];

		

		// TODO: Support holes using multiple paths

		var path = this.googlePolygon.getPath();

		for(var i = 0; i < path.getLength(); i++)

		{

			var latLng = path.getAt(i);

			result.points.push({

				lat: latLng.lat(),

				lng: latLng.lng()

			});

		}

		

		return result;

	}

	

})(jQuery);