# Source: circle.js

    /**
     * @namespace WPGMZA
     * @module Circle
     * @requires WPGMZA.MapObject
     */
    (function($) {

    	var Parent = WPGMZA.MapObject;

    	/**
    	 * @class Circle
    	 * @summary Represents a generic circle. <b>Please do not instantiate this object directly, use createInstance</b>
    	 * @return {WPGMZA.Circle}
    	 */
    	WPGMZA.Circle = function(options, engineCircle)
    	{
    		var self = this;

    		WPGMZA.assertInstanceOf(this, "Circle");

    		this.center = new WPGMZA.LatLng();
    		this.radius = 100;

    		Parent.apply(this, arguments);
    	}

    	WPGMZA.Circle.prototype = Object.create(Parent.prototype);
    	WPGMZA.Circle.prototype.constructor = WPGMZA.Circle;

    	/**
    	 * @function createInstance
    	 * @summary Creates an instance of a circle, <b>please always use this function rather than calling the constructor directly</b>
    	 * @param {object} options Options for the object (optional)
    	 */
    	WPGMZA.Circle.createInstance = function(options)
    	{
    		var constructor;

    		if(WPGMZA.settings.engine == "google-maps")
    			constructor = WPGMZA.GoogleCircle;
    		else
    			constructor = WPGMZA.OLCircle;

    		return new constructor(options);
    	}

    	/**
    	 * @function getCenter
    	 * @returns {WPGMZA.LatLng}
    	 */
    	WPGMZA.Circle.prototype.getCenter = function()
    	{
    		return this.center.clone();
    	}

    	/**
    	 * @function setCenter
    	 * @param {object|WPGMZA.LatLng} latLng either a literal or as a WPGMZA.LatLng
    	 * @returns {void}
    	 */
    	WPGMZA.Circle.prototype.setCenter = function(latLng)
    	{
    		this.center.lat = latLng.lat;
    		this.center.lng = latLng.lng;
    	}

    	/**
    	 * @function getRadius
    	 * @summary Returns the circles radius in kilometers
    	 * @returns {WPGMZA.LatLng}
    	 */
    	WPGMZA.Circle.prototype.getRadius = function()
    	{
    		return this.radius;
    	}

    	/**
    	 * @function setRadius
    	 * @param {number} The radius
    	 * @returns {void}
    	 */
    	WPGMZA.Circle.prototype.setRadius = function(radius)
    	{
    		this.radius = radius;
    	}

    	/**
    	 * @function getMap
    	 * @summary Returns the map that this circle is being displayed on
    	 * @return {WPGMZA.Map}
    	 */
    	WPGMZA.Circle.prototype.getMap = function()
    	{
    		return this.map;
    	}

    	/**
    	 * @function setMap
    	 * @param {WPGMZA.Map} The target map
    	 * @summary Puts this circle on a map
    	 * @return {void}
    	 */
    	WPGMZA.Circle.prototype.setMap = function(map)
    	{
    		if(this.map)
    			this.map.removeCircle(this);

    		if(map)
    			map.addCircle(this);

    	}

    })(jQuery);