# Source: google-maps/google-modern-store-locator-circle.js

    /**

     * @namespace WPGMZA

     * @module GoogleModernStoreLocatorCircle

     * @requires WPGMZA.ModernStoreLocatorCircle

     */

    (function($) {

    	WPGMZA.GoogleModernStoreLocatorCircle = function(map, settings)

    	{

    		var self = this;

    		WPGMZA.ModernStoreLocatorCircle.call(this, map, settings);

    		this.intervalID = setInterval(function() {

    			var mapSize = {

    				width: $(self.mapElement).width(),

    				height: $(self.mapElement).height()

    			};

    			if(mapSize.width == self.mapSize.width && mapSize.height == self.mapSize.height)

    				return;

    			self.canvasLayer.resize_();

    			self.canvasLayer.draw();

    			self.mapSize = mapSize;

    		}, 1000);

    		$(document).bind('webkitfullscreenchange mozfullscreenchange fullscreenchange', function() {

    			self.canvasLayer.resize_();

    			self.canvasLayer.draw();

    		});

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype = Object.create(WPGMZA.ModernStoreLocatorCircle.prototype);

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.constructor = WPGMZA.GoogleModernStoreLocatorCircle;

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.initCanvasLayer = function()

    	{

    		var self = this;

    		if(this.canvasLayer)

    		{

    			this.canvasLayer.setMap(null);

    			this.canvasLayer.setAnimate(false);

    		}

    		this.canvasLayer = new CanvasLayer({

    			map: this.map.googleMap,

    			resizeHandler: function(event) {

    				self.onResize(event);

    			},

    			updateHandler: function(event) {

    				self.onUpdate(event);

    			},

    			animate: true,

    			resolutionScale: this.getResolutionScale()

            });

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.setOptions = function(options)

    	{

    		WPGMZA.ModernStoreLocatorCircle.prototype.setOptions.call(this, options);

    		this.canvasLayer.scheduleUpdate();

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.setPosition = function(position)

    	{

    		WPGMZA.ModernStoreLocatorCircle.prototype.setPosition.call(this, position);

    		this.canvasLayer.scheduleUpdate();

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.setRadius = function(radius)

    	{

    		WPGMZA.ModernStoreLocatorCircle.prototype.setRadius.call(this, radius);

    		this.canvasLayer.scheduleUpdate();

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getTransformedRadius = function(km)

    	{

    		var multiplierAtEquator = 0.006395;

    		var spherical = google.maps.geometry.spherical;

    		var center = this.settings.center;

    		var equator = new WPGMZA.LatLng({

    			lat: 0.0,

    			lng: 0.0

    		});

    		var latitude = new WPGMZA.LatLng({

    			lat: center.lat,

    			lng: 0.0

    		});

    		var offsetAtEquator = spherical.computeOffset(equator.toGoogleLatLng(), km * 1000, 90);

    		var offsetAtLatitude = spherical.computeOffset(latitude.toGoogleLatLng(), km * 1000, 90);

    		var factor = offsetAtLatitude.lng() / offsetAtEquator.lng();

    		var result = km * multiplierAtEquator * factor;

    		if(isNaN(result))

    			throw new Error("here");

    		return result;

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getCanvasDimensions = function()

    	{

    		return {

    			width: this.canvasLayer.canvas.width,

    			height: this.canvasLayer.canvas.height

    		};

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getWorldOriginOffset = function()

    	{

    		var projection = this.map.googleMap.getProjection();

    		var position = projection.fromLatLngToPoint(this.canvasLayer.getTopLeft());

    		return {

    			x: -position.x,

    			y: -position.y

    		};

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getCenterPixels = function()

    	{

    		var center = new WPGMZA.LatLng(this.settings.center);

    		var projection = this.map.googleMap.getProjection();

    		return projection.fromLatLngToPoint(center.toGoogleLatLng());

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getContext = function(type)

    	{

    		return this.canvasLayer.canvas.getContext("2d");

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.getScale = function()

    	{

    		return Math.pow(2, this.map.getZoom()) * this.getResolutionScale();

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.setVisible = function(visible)

    	{

    		WPGMZA.ModernStoreLocatorCircle.prototype.setVisible.call(this, visible);

    		this.canvasLayer.scheduleUpdate();

    	}

    	WPGMZA.GoogleModernStoreLocatorCircle.prototype.destroy = function()

    	{

    		this.canvasLayer.setMap(null);

    		this.canvasLayer = null;

    		clearInterval(this.intervalID);

    	}

    })(jQuery);