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