# Source: google-maps/google-vertex-context-menu.js

    /**
     * @namespace WPGMZA
     * @module GoogleVertexContextMenu
     * @requires wpgmza_api_call
     */
    (function($) {

    	if(WPGMZA.settings.engine != "google-maps")
    		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);