# Source: info-window.js

    /**
     * @namespace WPGMZA
     * @module InfoWindow
     * @requires WPGMZA.EventDispatcher
     */
    (function($) {

    	WPGMZA.InfoWindow = function(mapObject)
    	{
    		var self = this;

    		WPGMZA.EventDispatcher.call(this);

    		WPGMZA.assertInstanceOf(this, "InfoWindow");

    		if(!mapObject)
    			return;

    		this.mapObject = mapObject;

    		if(mapObject.map)
    		{
    			// This has to be slightly delayed so the map initialization won't overwrite the infowindow element
    			setTimeout(function() {
    				self.onMapObjectAdded(event);
    			}, 100);
    		}
    		else
    			mapObject.addEventListener("added", function(event) {
    				self.onMapObjectAdded(event);
    			});
    	}

    	WPGMZA.InfoWindow.prototype = Object.create(WPGMZA.EventDispatcher.prototype);
    	WPGMZA.InfoWindow.prototype.constructor = WPGMZA.InfoWindow;

    	WPGMZA.InfoWindow.OPEN_BY_CLICK = 1;
    	WPGMZA.InfoWindow.OPEN_BY_HOVER = 2;

    	WPGMZA.InfoWindow.getConstructor = function()
    	{
    		switch(WPGMZA.settings.engine)
    		{
    			case "google-maps":
    				if(WPGMZA.isProVersion())
    					return WPGMZA.GoogleProInfoWindow;
    				return WPGMZA.GoogleInfoWindow;
    				break;

    			default:
    				if(WPGMZA.isProVersion())
    					return WPGMZA.OLProInfoWindow;
    				return WPGMZA.OLInfoWindow;
    				break;
    		}
    	}

    	WPGMZA.InfoWindow.createInstance = function(mapObject)
    	{
    		var constructor = this.getConstructor();
    		return new constructor(mapObject);
    	}

    	/**
    	 * Gets the content for the info window and passes it to the specified callback - this allows for delayed loading (eg AJAX) as well as instant content
    	 * @return void
    	 */
    	WPGMZA.InfoWindow.prototype.getContent = function(callback)
    	{
    		var html = "";

    		if(this.mapObject instanceof WPGMZA.Marker)
    			html = this.mapObject.address;

    		callback(html);
    	}

    	/**
    	 * Opens the info window
    	 * @return boolean FALSE if the info window should not & will not open, TRUE if it will
    	 */
    	WPGMZA.InfoWindow.prototype.open = function(map, mapObject)
    	{
    		var self = this;

    		this.mapObject = mapObject;

    		if(WPGMZA.settings.disable_infowindows)
    			return false;

    		return true;
    	}

    	WPGMZA.InfoWindow.prototype.close = function()
    	{

    	}

    	/**
    	 * Event listener for when the map object is added. This will cause the info window to open if the map object has infoopen set
    	 * @return void
    	 */
    	WPGMZA.InfoWindow.prototype.onMapObjectAdded = function()
    	{
    		if(this.mapObject.settings.infoopen == 1)
    			this.open();
    	}

    })(jQuery);