text: /*
   * L.Polygon is used to display polygons on a map.
   */
  
  L.Polygon = L.Polyline.extend({
  	options: {
  		fill: true
  	},
  
  	initialize: function (latlngs, options) {
  		var i, len, hole;
  
  		L.Polyline.prototype.initialize.call(this, latlngs, options);
  
  		if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
  			this._latlngs = this._convertLatLngs(latlngs[0]);
  			this._holes = latlngs.slice(1);
  
  			for (i = 0, len = this._holes.length; i < len; i++) {
  				hole = this._holes[i] = this._convertLatLngs(this._holes[i]);
  				if (hole[0].equals(hole[hole.length - 1])) {
  					hole.pop();
  				}
  			}
  		}
  
  		// filter out last point if its equal to the first one
  		latlngs = this._latlngs;
  
  		if (latlngs[0].equals(latlngs[latlngs.length - 1])) {
  			latlngs.pop();
  		}
  	},
  
  	projectLatlngs: function () {
  		L.Polyline.prototype.projectLatlngs.call(this);
  
  		// project polygon holes points
  		// TODO move this logic to Polyline to get rid of duplication
  		this._holePoints = [];
  
  		if (!this._holes) { return; }
  
  		var i, j, len, len2;
  
  		for (i = 0, len = this._holes.length; i < len; i++) {
  			this._holePoints[i] = [];
  
  			for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
  				this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
  			}
  		}
  	},
  
  	_clipPoints: function () {
  		var points = this._originalPoints,
  		    newParts = [];
  
  		this._parts = [points].concat(this._holePoints);
  
  		if (this.options.noClip) { return; }
  
  		for (var i = 0, len = this._parts.length; i < len; i++) {
  			var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
  			if (clipped.length) {
  				newParts.push(clipped);
  			}
  		}
  
  		this._parts = newParts;
  	},
  
  	_getPathPartStr: function (points) {
  		var str = L.Polyline.prototype._getPathPartStr.call(this, points);
  		return str + (L.Browser.svg ? 'z' : 'x');
  	}
  });
  
  L.polygon = function (latlngs, options) {
  	return new L.Polygon(latlngs, options);
  };
  