/**

 * @namespace WPGMZA

 * @module GoogleVertexContextMenu

 * @requires wpgmza_api_call

 */

(function($) {

	

	if(WPGMZA.settings.engine != "google-maps")

		return;

	

	if(WPGMZA.googleAPIStatus && WPGMZA.googleAPIStatus.code == "USER_CONSENT_NOT_GIVEN")

		return;

	

	WPGMZA.GoogleVertexContextMenu = function(mapEditPage)

	{

		var self = this;

		

		this.mapEditPage = mapEditPage;

		

		this.element = document.createElement("div");

		this.element.className = "wpgmza-vertex-context-menu";

		this.element.innerHTML = "Delete";

		

		google.maps.event.addDomListener(this.element, "click", function(event) {

			self.removeVertex();

			event.preventDefault();

			event.stopPropagation();

			return false;

		});

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype = new google.maps.OverlayView();

	

	WPGMZA.GoogleVertexContextMenu.prototype.onAdd = function()

	{

		var self = this;

		var map = this.getMap();

		

		this.getPanes().floatPane.appendChild(this.element);

		this.divListener = google.maps.event.addDomListener(map.getDiv(), "mousedown", function(e) {

			if(e.target != self.element)

				self.close();

		}, true);

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype.onRemove = function()

	{

		google.maps.event.removeListener(this.divListener);

		this.element.parentNode.removeChild(this.element);

		

		this.set("position");

		this.set("path");

		this.set("vertex");

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype.open = function(map, path, vertex)

	{

		this.set('position', path.getAt(vertex));

		this.set('path', path);

		this.set('vertex', vertex);

		this.setMap(map);

		this.draw();

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype.close = function()

	{

		this.setMap(null);

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype.draw = function()

	{

		var position = this.get('position');

		var projection = this.getProjection();



		if (!position || !projection)

		  return;



		var point = projection.fromLatLngToDivPixel(position);

		this.element.style.top = point.y + 'px';

		this.element.style.left = point.x + 'px';

	}

	

	WPGMZA.GoogleVertexContextMenu.prototype.removeVertex = function()

	{

		var path = this.get('path');

		var vertex = this.get('vertex');



		if (!path || vertex == undefined) {

		  this.close();

		  return;

		}



		path.removeAt(vertex);

		this.close();

	}

	

})(jQuery);