Source: Control/Control.js

/**
 * @namespace BKGWebMap.Control
 * @type {object}
 */
BKGWebMap.Control = BKGWebMap.Control || {};
/**
 * Create four standard positions for map controls (top-left, top-right, bottom-left, bottom-right)
 * @typedef {function} CONTROL_FACTORIES_standardPosition
 * @param {object} map - Map object
 * @param {string} position - Position of control (top-left, top-right, bottom-left, bottom-right)
 * @returns {object}
 */
/**
 * Create panel Control
 * @typedef {function} CONTROL_FACTORIES_panel
 * @param {object} map - Map object
 * @param {string} panelPosition - Panel position (Values: "left", "right") (/options/panelPosition)
 * @param {object} initialize - Tool that should be shown, when starting the Application. If empty or null, then panel will be closed. (Values: "geoSearch", "searchCoordinates", "layerSwitcher", "legend", "showAttributes", "copyCoordinates", "measure", "edit", "share") (/options/initialize)
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} layerSwitcher_options
 * @property {boolean} active - Activate tool. (/options/tools/layerSwitcher/active)
 * @property {string|null} div - DIV ID. (/options/tools/layerSwitcher/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/layerSwitcher/style)
 * @property {boolean} editStyle - User can change style of vector layers. (/options/tools/layerSwitcher/editStyle)
 * @property {boolean} changeVisibility - User can change visibility of layers. (/options/tools/layerSwitcher/changeVisibility)
 * @property {boolean} changeOrder - User can change layer order. (/options/tools/layerSwitcher/changeOrder)
 * @property {boolean} showWMSLayers - Show layers of WMS Services in menu. (/options/tools/layerSwitcher/showWMSLayers)
 * @property {integer} openLevel - Define which level of layerswitcher should be open. 0: Menu is closed, 1: Basemaps/Overlays menu is open, 2: Group layers are open. (/options/tools/layerSwitcher/openLevel)
 */
/**
 * Create layerSwitcher Control
 * @typedef {function} CONTROL_FACTORIES_layerSwitcher
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (layerSwitcher)
 * @param {object} options - Control options. See properties in {@link layerSwitcher_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} showAttributes_options
 * @property {boolean} active - Activate tool. (/options/tools/showAttributes/active)
 * @property {string|null} div - DIV ID. (/options/tools/showAttributes/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/showAttributes/style)
 */
/**
 * Create showAttributes Control
 * @typedef {function} CONTROL_FACTORIES_showAttributes
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (showAttributes)
 * @param {object} options - Control options. See properties in {@link showAttributes_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} legend_options
 * @property {boolean} active - Activate tool. (/options/tools/legend/active)
 * @property {string|null} div - DIV ID. (/options/tools/legend/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/legend/style)
 */
/**
 * Create legend Control
 * @typedef {function} CONTROL_FACTORIES_legend
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (legend)
 * @param {object} options - Control options. See properties in {@link legend_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} zoom_options
 * @property {boolean} active - Activate tool. (/options/tools/zoom/active)
 * @property {boolean} showZoomLevel - Show zoom level as text under the zoom buttons. (/options/tools/zoom/showZoomLevel)
 * @property {boolean} zoomToFullExtent - Zoom to full extent button. (/options/tools/zoom/zoomToFullExtent)
 * @property {boolean} history - Navigation history buttons. (/options/tools/zoom/history)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/zoom/position)
 * @property {string|null} div - DIV ID. (/options/tools/zoom/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/zoom/style)
 * @property {boolean} onlyFullScreen - Tool available only in full screen mode. (/options/tools/zoom/onlyFullScreen)
 */
/**
 * Create zoom Control
 * @typedef {function} CONTROL_FACTORIES_zoom
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (zoom)
 * @param {object} options - Control options. See properties in {@link zoom_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} fullScreen_options
 * @property {boolean} active - Activate tool. (/options/tools/fullScreen/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/fullScreen/position)
 * @property {string|null} div - DIV ID. (/options/tools/fullScreen/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/fullScreen/style)
 */
/**
 * Create fullScreen Control
 * @typedef {function} CONTROL_FACTORIES_fullScreen
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (fullScreen)
 * @param {object} options - Control options. See properties in {@link fullScreen_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} measure_options
 * @property {boolean} active - Activate tool. (/options/tools/measure/active)
 * @property {string|null} div - DIV ID. (/options/tools/measure/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/measure/style)
 */
/**
 * Create measure Control
 * @typedef {function} CONTROL_FACTORIES_measure
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (measure)
 * @param {object} options - Control options. See properties in {@link measure_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} edit_options
 * @property {boolean} active - Activate tool. (/options/tools/edit/active)
 * @property {string|null} div - DIV ID. (/options/tools/edit/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/edit/style)
 * @property {boolean} emptyLayer - If edit is active and there is no vector layer, add an empty vector layer. (/options/tools/edit/emptyLayer)
 * @property {object} export - Export editable layers. (/options/tools/edit/export)
 * @property {boolean} export.active - Activate tool. (/options/tools/edit/export/active)
 * @property {array} export.formats - Export formats. (Array values: "KML", "GML", "GEOJSON", "GPX", "WKT") (/options/tools/edit/export/formats)
 */
/**
 * Create edit Control
 * @typedef {function} CONTROL_FACTORIES_edit
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (edit)
 * @param {object} options - Control options. See properties in {@link edit_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} scalebar_options
 * @property {boolean} active - Activate tool. (/options/tools/scalebar/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/scalebar/position)
 * @property {string} scalebarType - Type of scalebar. (Values: "mapscale", "resolution", "distance", "mapscaleDistance", "resolutionDistance") (/options/tools/scalebar/scalebarType)
 * @property {string|null} div - DIV ID. (/options/tools/scalebar/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/scalebar/style)
 * @property {boolean} onlyFullScreen - Tool available only in full screen mode. (/options/tools/scalebar/onlyFullScreen)
 */
/**
 * Create scalebar Control
 * @typedef {function} CONTROL_FACTORIES_scalebar
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (scalebar)
 * @param {object} options - Control options. See properties in {@link scalebar_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} showCoordinates_options
 * @property {boolean} active - Activate tool. (/options/tools/showCoordinates/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/showCoordinates/position)
 * @property {object[]} coordinateSystems - Coordinate systems for dropdown menu. (/options/tools/showCoordinates/coordinateSystems) <br> <b>Below are properties of each Object in Array:</b>
 * @property {string} coordinateSystems.epsg -EPSG code. (/options/tools/searchCoordinates/showCoordinates/items/epsg)
 * @property {string} coordinateSystems.name - Name of coordinate system. (/options/tools/showCoordinates/coordinateSystems/items/name)
 * @property {string|null} div - DIV ID. (/options/tools/showCoordinates/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/showCoordinates/style)
 */
/**
 * Create showCoordinates Control
 * @typedef {function} CONTROL_FACTORIES_showCoordinates
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (showCoordinates)
 * @param {object} options - Control options. See properties in {@link showCoordinates_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} staticLinks_options
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/staticLinks/items/position)
 * @property {string|null} div - DIV ID. (/options/tools/staticLinks/items/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/staticLinks/items/style)
 * @property {string} url - URL for link. (/options/tools/staticLinks/items/url)
 * @property {string} title - Title for link shown on hover. (/options/tools/staticLinks/items/title)
 * @property {string} content - Content for link. Markup is allowed. (/options/tools/staticLinks/items/content)
 * @property {boolean} onlyFullScreen - Link available only in full screen mode. (/options/tools/staticLinks/items/onlyFullScreen)
 */
/**
 * Create staticLinks Control
 * @typedef {function} CONTROL_FACTORIES_staticLinks
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (staticLinks)
 * @param {object} options - Control options. See properties in {@link staticLinks_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} staticWindows_options
 * @property {boolean} active - Should window be initially open or close. (/options/tools/staticWindows/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/staticWindows/items/position)
 * @property {string|null} div - DIV ID. (/options/tools/staticWindows/items/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/staticWindows/items/style)
 * @property {integer[]} size - Size of window in pixel [width, height]. (/options/tools/staticWindows/items/size)
 * @property {string} title - Title for link shown on hover. (/options/tools/staticWindows/items/title)
 * @property {string} content - Content for link. Markup is allowed. (/options/tools/staticWindows/items/content)
 * @property {boolean} onlyFullScreen - Link available only in full screen mode. (/options/tools/staticWindows/items/onlyFullScreen)
 */
/**
 * Create staticWindows Control
 * @typedef {function} CONTROL_FACTORIES_staticWindows
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (staticWindows)
 * @param {object} options - Control options. See properties in {@link staticWindows_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} copyright_options
 * @property {boolean} active - Activate tool. (/options/tools/copyright/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/copyright/position)
 * @property {string|null} div - DIV ID. (/options/tools/copyright/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/copyright/style)
 * @property {string} maxWidth - Maximum width of copyright div (e.g. '200px'). (/options/tools/copyright/maxWidth)
 * @property {string} maxHeight - Maximum height of copyright div (e.g. '100px'). (/options/tools/copyright/maxHeight)
 * @property {boolean} onlyFullScreen - Tool available only in full screen mode. (/options/tools/copyright/onlyFullScreen)
 */
/**
 * Create copyright Control
 * @typedef {function} CONTROL_FACTORIES_copyright
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (copyright)
 * @param {object} options - Control options. See properties in {@link copyright_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * Method to create searchPanel Control
 * @typedef {function} CONTROL_FACTORIES_searchPanel
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (searchpanel)
 * @param {boolean} geoSearch - Is there a geoSearch control available
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * Create infoPanel Control
 * @typedef {function} CONTROL_FACTORIES_infoPanel
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (infoPanel)
 * @param {null} options - InfoPlanel options. Currently not used.
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} geoSearch_options
 * @property {boolean} active - Activate tool. (/options/tools/geoSearch/active)
 * @property {string|null} div - DIV ID. (/options/tools/geoSearch/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/geoSearch/style)
 * @property {integer|null} resultsMaxZoom - Max value for zooming to result features. (/options/tools/geoSearch/resultsMaxZoom)
 * @property {integer|null} suggestCount - Suggestion results that will be fetched. (/options/tools/geoSearch/suggestCount)
 * @property {integer|null} resultsCount - Results that will be fetched. (/options/tools/geoSearch/resultsCount)
 * @property {string|null} templatePopup - Template for popups (e.g. "< b>$text< /b>< br/>$typ< br/>($geometry.x $geometry.y)"). (/options/tools/geoSearch/templatePopup)
 * @property {string|null} templateList - Template for results list. (e.g. "< b>$text< /b>< br/>$typ< br/>($geometry.x $geometry.y)"). (/options/tools/geoSearch/templateList)
 * @property {object} protocol - Protocol used for geoSearch control. (/options/tools/geoSearch/protocol)
 */
/**
 * Create geoSearch Control
 * @typedef {function} CONTROL_FACTORIES_geoSearch
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (geoSearch)
 * @param {object} options - Control options. See properties in {@link geoSearch_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} searchCoordinates_options
 * @property {boolean} active - Activate tool. (/options/tools/searchCoordinates/active)
 * @property {string|null} div - DIV ID. (/options/tools/searchCoordinates/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/searchCoordinates/style)
 * @property {object[]} coordinateSystems - Coordinate systems for dropdown menu. (/options/tools/searchCoordinates/coordinateSystems) <br> <b>Below are properties of each Object in Array:</b>
 * @property {string} coordinateSystems.epsg -EPSG code. (/options/tools/searchCoordinates/coordinateSystems/items/epsg)
 * @property {string} coordinateSystems.name - Name of coordinate system. (/options/tools/searchCoordinates/coordinateSystems/items/name)
 */
/**
 * Create searchCoordinates Control
 * @typedef {function} CONTROL_FACTORIES_searchCoordinates
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (searchCoordinates)
 * @param {object} options - Control options. See properties in {@link searchCoordinates_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} copyCoordinates_options
 * @property {boolean} active - Activate tool. (/options/tools/copyCoordinates/active)
 * @property {string|null} div - DIV ID. (/options/tools/copyCoordinates/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/copyCoordinates/style)
 * @property {object[]} coordinateSystems - Coordinate systems for dropdown menu. (/options/tools/copyCoordinates/coordinateSystems) <br> <b>Below are properties of each Object in Array:</b>
 * @property {string} coordinateSystems.epsg -EPSG code. (/options/tools/searchCoordinates/copyCoordinates/items/epsg)
 * @property {string} coordinateSystems.name - Name of coordinate system. (/options/tools/copyCoordinates/coordinateSystems/items/name)
 */
/**
 * Create copyCoordinates Control
 * @typedef {function} CONTROL_FACTORIES_copyCoordinates
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (copyCoordinates)
 * @param {object} options - Control options. See properties in {@link copyCoordinates_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} share_options
 * @property {boolean} active - Activate tool. (/options/tools/share/active)
 * @property {string|null} div - DIV ID. (/options/tools/share/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/share/style)
 * @property {object} print - Print map. (/options/tools/share/print)
 * @property {boolean} print.active - Activate tool. (/options/tools/share/print/active)
 * @property {string} print.stylesheet - URL of stylesheet file that can be used when printing. (/options/tools/share/print/stylesheet)
 * @property {object} permaLink - Use URL paramaters for exporting-importing map status. (/options/tools/share/permaLink)
 * @property {boolean} permaLink.active - Activate tool. (/options/tools/share/permaLink/active)
 * @property {object} jsonExport - Export-Import JSON with current status of application. (/options/tools/share/jsonExport)
 * @property {boolean} jsonExport.active - Activate tool. (/options/tools/share/jsonExport/active)
 * @property {string} jsonExport.appName - Name of BKG Webmap implementation that will be used in exported JSON. (/options/tools/share/jsonExport/appName)
 */
/**
 * Create share Control
 * @typedef {function} CONTROL_FACTORIES_share
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (share)
 * @param {object} options - Control options. See properties in {@link share_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * Create print Control
 * @typedef {function} CONTROL_FACTORIES_print
 * @param {object} map - Map object
 * @param {object} options - Control options.
 * @param {boolean} options.active - Activate tool. (/options/tools/share/print/active)
 * @param {string} options.stylesheet - URL of stylesheet file that can be used when printing. (/options/tools/share/print/stylesheet)
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * @typedef {object} customLayers_options
 * @property {boolean} active - Activate tool. (/options/tools/customLayers/active)
 * @property {boolean} edit - Enable editing for custom layer. (/options/tools/customLayers/edit)
 * @property {boolean} changeVisibility - User can change visibility of custom layers. (/options/tools/customLayers/changeVisibility)
 * @property {string} defaultStyle - Default style of custom vector layers. Use /styles/items/name. (/options/tools/customLayers/defaultStyle)
 * @property {string[]} dataTypes - Layer types. (Values in array: "BKG", "WMS", "WMTS", "WFS", "CSV", "XLS", "GPS") (/options/tools/customLayers/dataTypes)
 */
/**
 * Create customLayers Control
 * @typedef {function} CONTROL_FACTORIES_customLayers
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (customLayers)
 * @param {object} options - Control options. See properties in {@link customLayers_options}
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * Create permaLink Control
 * @typedef {function} CONTROL_FACTORIES_permaLink
 * @param {object} map - Map object
 * @returns {object}
 */
/**
 * Create jsonExport Control
 * @typedef {function} CONTROL_FACTORIES_jsonExport
 * @param {object} map - Map object
 * @param {object} options - Control options.
 * @param {boolean} options.active - Activate tool. (/options/tools/share/jsonExport/active)
 * @param {string} options.appName - Name of BKG Webmap implementation that will be used in exported JSON. (/options/tools/share/jsonExport/appName)
 * @param {object} panel - Panel object
 * @returns {object}
 */
/**
 * Create cookieCheck Control
 * @typedef {function} CONTROL_FACTORIES_cookieCheck
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (cookieCheck)
 * @param {object} options - Control options.
 * @returns {object}
 */
/**
 * @typedef {object} overviewMap_options
 * @property {boolean} active - Activate tool. (/options/tools/overviewMap/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/overviewMap/position)
 * @property {string|null} div - DIV ID. (/options/tools/overviewMap/div)
 * @property {boolean} collapsible - Overview map can be collapsed. (/options/tools/overviewMap/collapsible)
 * @property {boolean} collapsed - Overview map should start collapsed. (/options/tools/overviewMap/collapsed)
 * @property {array|null} layers - Array with layer IDs that should be shown in overview map. If empty or null, all layers will be used.. (/options/tools/overviewMap/layers)
 * @property {boolean} onlyFullScreen - Link available only in full screen mode. (/options/tools/overviewMap/items/onlyFullScreen)
 */
/**
 * Create overviewMap Control
 * @typedef {function} CONTROL_FACTORIES_overviewMap
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (overviewMap)
 * @param {object} options - Control options. See properties in {@link overviewMap_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * @typedef {object} timeSlider_options
 * @property {boolean} active - Activate tool. (/options/tools/timeSlider/active)
 * @property {string} position - Position of control. It will be used only if div is null. Values: 'top-left', 'top-right', 'bottom-left', 'bottom-right' or CSS properties (e.g. 'left: 5px; top: 10px;'). (/options/tools/timeSlider/position)
 * @property {string|null} div - DIV ID. (/options/tools/timeSlider/div)
 * @property {string} style - CSS Class used for styling. (/options/tools/timeSlider/style)
 */
/**
 * Create timeSlider Control
 * @typedef {function} CONTROL_FACTORIES_timeSlider
 * @param {object} map - Map object
 * @param {string} controlName - Name of control (timeSlider)
 * @param {object} options - Control options. See properties in {@link timeSlider_options}
 * @param {object} panel - Panel object
 * @param {object} standardPositionControls - Object with standardPositionControls
 * @returns {object}
 */
/**
 * Create marker Control
 * @typedef {function} CONTROL_FACTORIES_marker
 * @param {object} map - Map object
 * @returns {object}
 */
/**
 * Factory functions to generate controls
 * @type {object}
 * @memberof BKGWebMap.Control
 * @property {function} standardPosition - Method to create four standard positions for map controls (top-left, top-right, bottom-left, bottom-right). See {@link CONTROL_FACTORIES_standardPosition}
 * @property {function} geoSearch - Method to create geoSearch Control. See {@link CONTROL_FACTORIES_geoSearch}
 * @property {function} searchCoordinates - Method to create searchCoordinates Control. See {@link CONTROL_FACTORIES_searchCoordinates}
 * @property {function} layerSwitcher - Method to create layerSwitcher Control. See {@link CONTROL_FACTORIES_layerSwitcher}
 * @property {function} customLayers - Method to create customLayers Control. See {@link CONTROL_FACTORIES_customLayers}
 * @property {function} legend - Method to create legend Control. See {@link CONTROL_FACTORIES_legend}
 * @property {function} showAttributes - Method to create showAttributes Control. See {@link CONTROL_FACTORIES_showAttributes}
 * @property {function} copyCoordinates - Method to create copyCoordinates Control. See {@link CONTROL_FACTORIES_copyCoordinates}
 * @property {function} measure - Method to create measure Control. See {@link CONTROL_FACTORIES_measure}
 * @property {function} edit - Method to create measure Control. See {@link CONTROL_FACTORIES_edit}
 * @property {function} share - Method to create share Control. See {@link CONTROL_FACTORIES_share}
 * @property {function} zoom - Method to create zoom Control. See {@link CONTROL_FACTORIES_zoom}
 * @property {function} scalebar - Method to create scalebar Control. See {@link CONTROL_FACTORIES_scalebar}
 * @property {function} copyright - Method to create copyright Control. See {@link CONTROL_FACTORIES_copyright}
 * @property {function} showCoordinates - Method to create showCoordinates Control. See {@link CONTROL_FACTORIES_showCoordinates}
 * @property {function} staticLinks - Method to create staticLinks Control. See {@link CONTROL_FACTORIES_staticLinks}
 * @property {function} staticWindows - Method to create staticWindows Control. See {@link CONTROL_FACTORIES_staticWindows}
 * @property {function} fullScreen - Method to create fullScreen Control. See {@link CONTROL_FACTORIES_fullScreen}
 * @property {function} overviewMap - Method to create overviewMap Control. See {@link CONTROL_FACTORIES_overviewMap}
 * @property {function} timeSlider - Method to create timeSlider Control. See {@link CONTROL_FACTORIES_timeSlider}
 * @property {function} panel - Method to create panel Control. See {@link CONTROL_FACTORIES_panel}
 * @property {function} searchPanel - Method to create searchPanel Control. See {@link CONTROL_FACTORIES_searchPanel}
 * @property {function} infoPanel - Method to create infoPanel Control. See {@link CONTROL_FACTORIES_infoPanel}
 * @property {function} print - Method to create print Control. See {@link CONTROL_FACTORIES_print}
 * @property {function} permaLink - Method to create permaLink Control. See {@link CONTROL_FACTORIES_permaLink}
 * @property {function} jsonExport - Method to create jsonExport Control. See {@link CONTROL_FACTORIES_jsonExport}
 * @property {function} cookieCheck - Method to create cookieCheck Control. See {@link CONTROL_FACTORIES_cookieCheck}
 * @property {function} marker - Method to create marker Control. See {@link CONTROL_FACTORIES_marker}
 */
BKGWebMap.Control.FACTORIES = {
    standardPosition: function () {
        var standardPositionControls = {};
        for (var i = 0; i < BKGWebMap.STANDARD_POSITION.length; i++) {
            standardPositionControls[BKGWebMap.STANDARD_POSITION[i]] = BKGWebMap.Control.createStandardPosition(BKGWebMap.STANDARD_POSITION[i]);
            ol.inherits(standardPositionControls[BKGWebMap.STANDARD_POSITION[i]], ol.control.Control);
        }
        return standardPositionControls;
    },
    panel: function () {
        BKGWebMap.Control.Panel = BKGWebMap.Control.createPanel();
        ol.inherits(BKGWebMap.Control.Panel, ol.control.Control);
        return BKGWebMap.Control.Panel;
    },
    layerSwitcher: function () {
        BKGWebMap.Control.LayerSwitcher = BKGWebMap.Control.createLayerSwitcher();
        ol.inherits(BKGWebMap.Control.LayerSwitcher, ol.control.Control);
        return BKGWebMap.Control.LayerSwitcher;
    },
    showAttributes: function () {
        BKGWebMap.Control.ShowAttributes = BKGWebMap.Control.createShowAttributes();
        ol.inherits(BKGWebMap.Control.ShowAttributes, ol.control.Control);
        return BKGWebMap.Control.ShowAttributes;
    },
    legend: function () {
        BKGWebMap.Control.Legend = BKGWebMap.Control.createLegend();
        ol.inherits(BKGWebMap.Control.Legend, ol.control.Control);
        return BKGWebMap.Control.Legend;
    },
    zoom: function () {
        BKGWebMap.Control.Zoom = BKGWebMap.Control.createZoom();
        ol.inherits(BKGWebMap.Control.Zoom, ol.control.Control);
        return BKGWebMap.Control.Zoom;
    },
    fullScreen: function () {
        BKGWebMap.Control.FullScreen = BKGWebMap.Control.createFullScreen();
        ol.inherits(BKGWebMap.Control.FullScreen, ol.control.FullScreen);
        return BKGWebMap.Control.FullScreen;
    },
    measure: function () {
        BKGWebMap.Control.Measure = BKGWebMap.Control.createMeasure();
        ol.inherits(BKGWebMap.Control.Measure, ol.control.Control);
        return BKGWebMap.Control.Measure;
    },
    edit: function () {
        BKGWebMap.Control.Edit = BKGWebMap.Control.createEdit();
        ol.inherits(BKGWebMap.Control.Edit, ol.control.Control);
        return BKGWebMap.Control.Edit;
    },
    scalebar: function () {
        BKGWebMap.Control.Scalebar = BKGWebMap.Control.createScalebar();
        ol.inherits(BKGWebMap.Control.Scalebar, ol.control.Control);
        return BKGWebMap.Control.Scalebar;
    },
    showCoordinates: function () {
        BKGWebMap.Control.ShowCoordinates = BKGWebMap.Control.createShowCoordinates();
        ol.inherits(BKGWebMap.Control.ShowCoordinates, ol.control.Control);
        return BKGWebMap.Control.ShowCoordinates;
    },
    staticLinks: function (i) {
        BKGWebMap.Control['StaticLinks' + i] = BKGWebMap.Control.createStaticLinks();
        ol.inherits(BKGWebMap.Control['StaticLinks' + i], ol.control.Control);
        return BKGWebMap.Control['StaticLinks' + i];
    },
    staticWindows: function (i) {
        BKGWebMap.Control['StaticWindows' + i] = BKGWebMap.Control.createStaticWindows();
        ol.inherits(BKGWebMap.Control['StaticWindows' + i], ol.control.Control);
        return BKGWebMap.Control['StaticWindows' + i];
    },
    copyright: function () {
        BKGWebMap.Control.Copyright = BKGWebMap.Control.createCopyright();
        ol.inherits(BKGWebMap.Control.Copyright, ol.control.Control);
        return BKGWebMap.Control.Copyright;
    },
    searchPanel: function () {
        BKGWebMap.Control.SearchPanel = BKGWebMap.Control.createSearchPanel();
        ol.inherits(BKGWebMap.Control.SearchPanel, ol.control.Control);
        return BKGWebMap.Control.SearchPanel;
    },
    infoPanel: function () {
        BKGWebMap.Control.InfoPanel = BKGWebMap.Control.createInfoPanel();
        ol.inherits(BKGWebMap.Control.InfoPanel, ol.control.Control);
        return BKGWebMap.Control.InfoPanel;
    },

    geoSearch: function () {
        BKGWebMap.Control.GeoSearch = BKGWebMap.Control.createGeoSearch();
        ol.inherits(BKGWebMap.Control.GeoSearch, ol.control.Control);
        return BKGWebMap.Control.GeoSearch;
    },
    searchCoordinates: function () {
        BKGWebMap.Control.SearchCoordinates = BKGWebMap.Control.createSearchCoordinates();
        ol.inherits(BKGWebMap.Control.SearchCoordinates, ol.control.Control);
        return BKGWebMap.Control.SearchCoordinates;
    },
    copyCoordinates: function () {
        BKGWebMap.Control.CopyCoordinates = BKGWebMap.Control.createCopyCoordinates();
        ol.inherits(BKGWebMap.Control.CopyCoordinates, ol.control.Control);
        return BKGWebMap.Control.CopyCoordinates;
    },
    share: function () {
        BKGWebMap.Control.Share = BKGWebMap.Control.createShare();
        ol.inherits(BKGWebMap.Control.Share, ol.control.Control);
        return BKGWebMap.Control.Share;
    },
    print: function () {
        BKGWebMap.Control.Print = BKGWebMap.Control.createPrint();
        ol.inherits(BKGWebMap.Control.Print, ol.control.Control);
        return BKGWebMap.Control.Print;
    },
    customLayers: function () {
        BKGWebMap.Control.CustomLayers = BKGWebMap.Control.createCustomLayers();
        ol.inherits(BKGWebMap.Control.CustomLayers, ol.control.Control);
        return BKGWebMap.Control.CustomLayers;
    },
    permaLink: function () {
        BKGWebMap.Control.PermaLink = BKGWebMap.Control.createPermaLink();
        return BKGWebMap.Control.PermaLink;
    },
    jsonExport: function () {
        BKGWebMap.Control.JsonExport = BKGWebMap.Control.createJsonExport();
        ol.inherits(BKGWebMap.Control.JsonExport, ol.control.Control);
        return BKGWebMap.Control.JsonExport;
    },
    cookieCheck: function () {
        BKGWebMap.Control.CookieCheck = BKGWebMap.Control.createCookieCheck();
        ol.inherits(BKGWebMap.Control.CookieCheck, ol.control.Control);
        return BKGWebMap.Control.CookieCheck;
    },
    overviewMap: function () {
        BKGWebMap.Control.OverviewMap = BKGWebMap.Control.createOverviewMap();
        ol.inherits(BKGWebMap.Control.OverviewMap, ol.control.Control);
        return BKGWebMap.Control.OverviewMap;
    },
    timeSlider: function () {
        BKGWebMap.Control.TimeSlider = BKGWebMap.Control.createTimeSlider();
        ol.inherits(BKGWebMap.Control.TimeSlider, ol.control.Control);
        return BKGWebMap.Control.TimeSlider;
    },
    marker: function () {
        BKGWebMap.Control.Marker = BKGWebMap.Control.createMarker();
        ol.inherits(BKGWebMap.Control.Marker, ol.control.Control);
        return BKGWebMap.Control.Marker;
    }
};

/**
 * Object with all BKG Webmap Controls used in application
 * @type {object}
 */
BKGWebMap.Controls = BKGWebMap.Controls || {};