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);