diff --git a/dist/collections/ItsLayerCollection.js.map b/dist/collections/ItsLayerCollection.js.map
index 739f898ed7a58f93fe9f5b80143b4ff6fbfd4d12..e52096bca934ec2f8b1aa681048f534cb9b37437 100644
--- a/dist/collections/ItsLayerCollection.js.map
+++ b/dist/collections/ItsLayerCollection.js.map
@@ -1 +1 @@
-{"version":3,"file":"ItsLayerCollection.js","sourceRoot":"","sources":["../../src/collections/ItsLayerCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n\r\n\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n    _map: ol.Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap: ol.Map, exclude?: Array<string>) {\r\n\r\n        this._map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers() {\r\n        return this._layers;\r\n    }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"ItsLayerCollection.js","sourceRoot":"","sources":["../../src/collections/ItsLayerCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n    _map: ol.Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap: ol.Map, exclude?: Array<string>) {\r\n\r\n        this._map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers(): LayerItsInventory[] {\r\n        return this._layers;\r\n    }\r\n\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n"]}
\ No newline at end of file
diff --git a/dist/collections/LayerLegend.d.ts b/dist/collections/LayerLegend.d.ts
index cd1ac2cdbd0364337e5bf2df55115c69ce376dd0..5a064277de64e074d01745a48c03c074b3a9afce 100644
--- a/dist/collections/LayerLegend.d.ts
+++ b/dist/collections/LayerLegend.d.ts
@@ -1,3 +1,6 @@
+/// <reference types="jquery" />
+/// <reference types="jqueryui" />
+import { LayerBase } from "../layers";
 export interface iLegendItem {
     groupName: string;
     collapse: boolean;
@@ -13,11 +16,11 @@ export interface iLegendOptions {
  * a wrapper to make a legend
  */
 declare class LayerLegend {
-    $divElement: any;
-    _legendItems: any;
+    $divElement: JQuery;
+    _legendItems: Array<iLegendItem | LayerBase>;
     layerGroup: any;
-    legendId: any;
-    /**
+    legendId: string;
+    /**``
      *
      * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
      * @param {string} divId the div where the legend should be added
@@ -26,12 +29,12 @@ declare class LayerLegend {
      * @param {string} [options.legendTitle=Legend] the legend title
      * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
      */
-    constructor(legendItems: iLegendItem[], divId: string, options?: iLegendOptions);
+    constructor(legendItems: Array<iLegendItem | LayerBase>, divId: string, options?: iLegendOptions);
     /**
      * @param {Array} [legendItems=this._layerConfig] the legend items
      * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
      * @private
      */
-    _buildTree(legendItems: iLegendItem[], parents?: string[]): void;
+    _buildTree(legendItems: Array<iLegendItem | LayerBase>, parents?: string[]): void;
 }
 export default LayerLegend;
diff --git a/dist/collections/LayerLegend.js b/dist/collections/LayerLegend.js
index b0536bba1bbfe9245b0f9b4220ab0c52f9dba94f..e07edaf889fecd3cba2c0f665ba5e6d9e8b3536e 100644
--- a/dist/collections/LayerLegend.js
+++ b/dist/collections/LayerLegend.js
@@ -165,7 +165,7 @@ var LayerGroup = (function () {
  * a wrapper to make a legend
  */
 var LayerLegend = (function () {
-    /**
+    /**``
      *
      * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
      * @param {string} divId the div where the legend should be added
@@ -265,11 +265,11 @@ var LayerLegend = (function () {
         if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
             parents = [];
         }
-        if (typeof oneItem['groupName'] !== 'undefined') {
+        if (typeof oneItem.groupName !== 'undefined') {
             var groupItem = legendItems[0];
             var newGroup = this.layerGroup.addGroup(groupItem, parents);
             parents.push(newGroup.groupId);
-            this._buildTree(groupItem.items, parents);
+            this._buildTree(oneItem.items, parents);
         }
         else {
             /**
diff --git a/dist/collections/LayerLegend.js.map b/dist/collections/LayerLegend.js.map
index 805339336b7a5cf09e348b76e4e29820978b5fb9..7ed71edf1cb8c8392819aab3d6cc6d6d4c1ee16d 100644
--- a/dist/collections/LayerLegend.js.map
+++ b/dist/collections/LayerLegend.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerLegend.js","sourceRoot":"","sources":["../../src/collections/LayerLegend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\nimport {LayerBase} from \"../layers\";\r\n\r\n\r\n\r\nexport interface iLegendItem{\r\n    groupName: string;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    items: iLegendItem[]\r\n}\r\n\r\nexport interface iLegendOptions{\r\n    layerDivClasses?: string[]\r\n    legendTitle?: string\r\n    scaleDependent?: boolean\r\n}\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?: iLegendItem, parent?: LayerGroup) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig: iLegendItem, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer: LayerBase, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n\r\n\r\n    getLegendHtml(legendId: string, options: iLegendOptions) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds: string[], theGroup: LayerGroup, layerDivClasses: string[]): string {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    $divElement: any;\r\n    _legendItems: any;\r\n    layerGroup: any;\r\n    legendId: any;\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems: iLegendItem[], divId: string, options: iLegendOptions = {}) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems: iLegendItem[], parents?: string[]) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerLegend.js","sourceRoot":"","sources":["../../src/collections/LayerLegend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\nimport {LayerBase} from \"../layers\";\r\n\r\n\r\n\r\nexport interface iLegendItem{\r\n    groupName: string;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    items: iLegendItem[]\r\n}\r\n\r\nexport interface iLegendOptions{\r\n    layerDivClasses?: string[]\r\n    legendTitle?: string\r\n    scaleDependent?: boolean\r\n}\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?: iLegendItem, parent?: LayerGroup) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig: iLegendItem, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer: LayerBase, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n\r\n\r\n    getLegendHtml(legendId: string, options: iLegendOptions) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds: string[], theGroup: LayerGroup, layerDivClasses: string[]): string {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    $divElement: JQuery;\r\n    _legendItems: Array<iLegendItem|LayerBase>;\r\n    layerGroup: any;\r\n    legendId: string;\r\n\r\n    /**``\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems: Array<iLegendItem|LayerBase>, divId: string, options: iLegendOptions = {}) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems: Array<iLegendItem|LayerBase>, parents?: string[]) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof (oneItem as iLegendItem).groupName !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree((oneItem as iLegendItem).items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem: LayerBase = legendItems[0] as LayerBase;\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n"]}
\ No newline at end of file
diff --git a/dist/react/Slider.jsx.map b/dist/react/Slider.jsx.map
index 9d0cc1ec2afd574debeb7fa64b1dcd7e4ba85c44..90b712f2ec4c22cdb393e087eff853ba7c228a49 100644
--- a/dist/react/Slider.jsx.map
+++ b/dist/react/Slider.jsx.map
@@ -1 +1 @@
-{"version":3,"file":"Slider.jsx","sourceRoot":"","sources":["../../src/react/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\n\r\nimport {React} from './reactAndRedux';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\n\r\n\r\nexport interface iSlider {\r\n    change: (d: number) => any;\r\n    steps?: number;\r\n    animate?: boolean;\r\n    value?: number;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, null> {\r\n    uid: string;\r\n    startUid: string;\r\n    endUid: string;\r\n    intervalUid: string;\r\n    el: HTMLInputElement;\r\n    startButton: HTMLButtonElement;\r\n    endButton: HTMLButtonElement;\r\n    intervalSelect: HTMLSelectElement;\r\n    interval: number;\r\n    running: boolean;\r\n    minVal: number;\r\n    maxVal: number;\r\n    step: number;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.endUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.endButton = document.getElementById(this.endUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n    }\r\n\r\n    updateRunning() {\r\n\r\n        this.startButton.disabled = this.running;\r\n        this.el.disabled = this.running;\r\n        this.endButton.disabled = !this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n            console.log(parseFloat(this.el.value));\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate(){\r\n        if (this.running){\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n\r\n    render() {\r\n\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {this.props.change(parseFloat(evt.target.value))},\r\n            style: {width: '100%'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value.toString(),\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps){\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value){\r\n            delete attrs.defaultValue;\r\n            // attrs['value'] = this.props.value.toString()\r\n        } else {\r\n            delete attrs.value;\r\n            // attrs['defaultValue'] = \"0\";\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let intervalSelect = null;\r\n\r\n        if (this.props.animate) {\r\n            start = <button id={this.startUid} onClick={() => {\r\n                this.startAnimate()\r\n            }}>Start</button>;\r\n\r\n            stop = <button id={this.endUid} onClick={() => {\r\n                this.stopAnimate()\r\n            }}>Stop</button>;\r\n\r\n            intervalSelect = <span>\r\n            <label>Interval (s)</label>\r\n            <select defaultValue=\"200\" id={this.intervalUid} onChange={() => {this.restartAnimate()}}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div>\r\n             <input {...attrs}/>\r\n            {start}{stop}{intervalSelect}\r\n        </div>\r\n    }\r\n\r\n}"]}
\ No newline at end of file
+{"version":3,"file":"Slider.jsx","sourceRoot":"","sources":["../../src/react/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\n\r\nimport {React} from './reactAndRedux';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\n\r\n\r\nexport interface iSlider {\r\n    change: (d: number) => any;\r\n    steps?: number;\r\n    animate?: boolean;\r\n    value?: number;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, null>{\r\n    uid: string;\r\n    startUid: string;\r\n    endUid: string;\r\n    intervalUid: string;\r\n    el: HTMLInputElement;\r\n    startButton: HTMLButtonElement;\r\n    endButton: HTMLButtonElement;\r\n    intervalSelect: HTMLSelectElement;\r\n    interval: number;\r\n    running: boolean;\r\n    minVal: number;\r\n    maxVal: number;\r\n    step: number;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.endUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.endButton = document.getElementById(this.endUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n    }\r\n\r\n    updateRunning() {\r\n\r\n        this.startButton.disabled = this.running;\r\n        this.el.disabled = this.running;\r\n        this.endButton.disabled = !this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n            console.log(parseFloat(this.el.value));\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate(){\r\n        if (this.running){\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n\r\n    render() {\r\n\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {this.props.change(parseFloat(evt.target.value))},\r\n            style: {width: '100%'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value.toString(),\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps){\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value){\r\n            delete attrs.defaultValue;\r\n            // attrs['value'] = this.props.value.toString()\r\n        } else {\r\n            delete attrs.value;\r\n            // attrs['defaultValue'] = \"0\";\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let intervalSelect = null;\r\n\r\n        if (this.props.animate) {\r\n            start = <button id={this.startUid} onClick={() => {\r\n                this.startAnimate()\r\n            }}>Start</button>;\r\n\r\n            stop = <button id={this.endUid} onClick={() => {\r\n                this.stopAnimate()\r\n            }}>Stop</button>;\r\n\r\n            intervalSelect = <span>\r\n            <label>Interval (s)</label>\r\n            <select defaultValue=\"200\" id={this.intervalUid} onChange={() => {this.restartAnimate()}}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div>\r\n             <input {...attrs}/>\r\n            {start}{stop}{intervalSelect}\r\n        </div>\r\n    }\r\n\r\n}"]}
\ No newline at end of file
diff --git a/src/collections/ItsLayerCollection.ts b/src/collections/ItsLayerCollection.ts
index 002831c603639612a2830eeb32d1a750933e2abc..88bfee1d95324485983fbd6ea784ba11f0ea2b63 100644
--- a/src/collections/ItsLayerCollection.ts
+++ b/src/collections/ItsLayerCollection.ts
@@ -94,8 +94,6 @@ let itsConfig = [
             ]
         }
     }
-
-
 ];
 
 
@@ -157,9 +155,10 @@ export class ItsLayerCollection {
      * Return the array of layers in this collection
      * @returns {Array<LayerItsInventory>} an array of layers
      */
-    get layers() {
+    get layers(): LayerItsInventory[] {
         return this._layers;
     }
+
 }
 
 nm.ItsLayerCollection = ItsLayerCollection;
diff --git a/src/collections/LayerLegend.ts b/src/collections/LayerLegend.ts
index 22bfb02f37f4e14a410f24b1800a051ea32c4601..1e586e9642e3c6c1a21aa566289e67662ef0d94e 100644
--- a/src/collections/LayerLegend.ts
+++ b/src/collections/LayerLegend.ts
@@ -224,18 +224,17 @@ class LayerGroup {
 }
 
 
-
 /**
  * a wrapper to make a legend
  */
 class LayerLegend {
 
-    $divElement: any;
-    _legendItems: any;
+    $divElement: JQuery;
+    _legendItems: Array<iLegendItem|LayerBase>;
     layerGroup: any;
-    legendId: any;
+    legendId: string;
 
-    /**
+    /**``
      *
      * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
      * @param {string} divId the div where the legend should be added
@@ -244,7 +243,7 @@ class LayerLegend {
      * @param {string} [options.legendTitle=Legend] the legend title
      * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
      */
-    constructor(legendItems: iLegendItem[], divId: string, options: iLegendOptions = {}) {
+    constructor(legendItems: Array<iLegendItem|LayerBase>, divId: string, options: iLegendOptions = {}) {
         for (let i of legendItems) {
             if (typeof i == 'undefined') {
                 throw 'undefined item passed in array to legend constructor';
@@ -342,7 +341,7 @@ class LayerLegend {
      * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
      * @private
      */
-    _buildTree(legendItems: iLegendItem[], parents?: string[]) {
+    _buildTree(legendItems: Array<iLegendItem|LayerBase>, parents?: string[]) {
 
         if (legendItems.length == 0) {
             return;
@@ -355,23 +354,22 @@ class LayerLegend {
             parents = [];
         }
 
-        if (typeof oneItem['groupName'] !== 'undefined') {
+        if (typeof (oneItem as iLegendItem).groupName !== 'undefined') {
             let groupItem = legendItems[0];
             let newGroup = this.layerGroup.addGroup(groupItem, parents);
             parents.push(newGroup.groupId);
-            this._buildTree(groupItem.items, parents);
+            this._buildTree((oneItem as iLegendItem).items, parents);
         } else {
             /**
              * @type {LayerBase}
              */
-            let layerItem = legendItems[0];
+            let layerItem: LayerBase = legendItems[0] as LayerBase;
 
             this.layerGroup.addLegendLayer(layerItem, parents);
         }
 
         this._buildTree(legendItems.slice(1), parents);
     }
-
 }
 
 nm.LayerLegend = LayerLegend;
diff --git a/src/react/Slider.tsx b/src/react/Slider.tsx
index d92131295557cfaa2d4653564c396d586f730192..b12e42dd27dab7351c37ba19e5be702823d0f9a0 100644
--- a/src/react/Slider.tsx
+++ b/src/react/Slider.tsx
@@ -15,7 +15,7 @@ export interface iSlider {
     value?: number;
 }
 
-export class Slider extends React.Component<iSlider, null> {
+export class Slider extends React.Component<iSlider, null>{
     uid: string;
     startUid: string;
     endUid: string;
diff --git a/test/serve/js/animate.js b/test/serve/js/animate.js
index 3dc1c1e42a967d091f048bc788d0be37ddd46c9a..acfd5bdcbc8308eaf253ed71ba17bbcaa1c10210 100644
--- a/test/serve/js/animate.js
+++ b/test/serve/js/animate.js
@@ -63,3356 +63,14 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 33);
+/******/ 	return __webpack_require__(__webpack_require__.s = 0);
 /******/ })
 /************************************************************************/
 /******/ ([
 /* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-module.exports = $;
-
-/***/ }),
-/* 2 */
 /***/ (function(module, exports) {
 
-module.exports = ol;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util');
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-        .replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
-        return v.toString(16);
-    });
-}
-nm.makeGuid = makeGuid;
-exports.default = makeGuid;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapPopupCls_1 = __webpack_require__(12);
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-exports.mapPopup = new mapPopupCls_1.default();
-exports.default = exports.mapPopup;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/8/2015.
- */
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers');
-/**
- * base interaction
- */
-var MapInteractionBase = (function () {
-    /**
-     * map interaction base
-     * @param subtype - the interaction subtype
-     */
-    function MapInteractionBase(subtype) {
-        this._map = null;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-    /**
-     * base initializer, returns true for already initialized
-     * @param theMap - the ol Map
-     * @returns true for already initialized
-     */
-    MapInteractionBase.prototype.init = function (theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-        }
-    };
-    Object.defineProperty(MapInteractionBase.prototype, "map", {
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-        get: function () {
-            return this._map;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-        get: function () {
-            return this._initialized;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    MapInteractionBase.prototype._checkInit = function () {
-        if (!this.initialized) {
-            var msg = this._subtype + " object not initialized";
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    };
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    MapInteractionBase.prototype.checkInit = function () {
-        this._checkInit();
-    };
-    return MapInteractionBase;
-}());
-exports.MapInteractionBase = MapInteractionBase;
-nm.MapInteractionBase = MapInteractionBase;
-exports.default = MapInteractionBase;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapMoveCls_1 = __webpack_require__(11);
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-exports.mapMove = new mapMoveCls_1.default();
-exports.default = exports.mapMove;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = __webpack_require__(13);
-var provide_1 = __webpack_require__(0);
-var mapMove_1 = __webpack_require__(6);
-var mapPopup_1 = __webpack_require__(4);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    if (options === void 0) { options = {}; }
-    var m = quickMapBase_1.quickMapBase(options);
-    mapMove_1.default.init(m);
-    mapPopup_1.default.init(m);
-    return m;
-}
-exports.quickMap = quickMap;
-nm.quickMap = quickMap;
-exports.default = quickMap;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var zoomResolutionConvert = __webpack_require__(14);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The base layer class
- * @abstract
- */
-var LayerBase = (function () {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-    function LayerBase(url, options) {
-        if (options === void 0) { options = {}; }
-        options = options || {};
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-        this._params = typeof options.params == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-        this.id = options.id || makeGuid_1.default();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        }
-        else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        this._source = undefined;
-        /**
-         *
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
-        };
-        this._legendContent = '';
-        if (this._legendCheckbox) {
-            this._legendContent += "<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " " +
-                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
-            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        else {
-            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBase.prototype._load = function () {
-        if (this.loaded == true) {
-            return true;
-        }
-        else {
-            this._loaded = true;
-            return false;
-        }
-    };
-    /**
-     * Get the legend html, be sure to only add to the DOM once
-     * @returns {string} html for layer wrapped in a div
-     */
-    LayerBase.prototype.getLegendDiv = function () {
-        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
-    };
-    /**
-     *
-     * @param additionalContent - additional content to add to legend
-     * @private
-     */
-    LayerBase.prototype._addLegendContent = function (additionalContent) {
-        if (additionalContent === void 0) { additionalContent = ''; }
-        var addCollapse = additionalContent.indexOf('<ul>') > -1;
-        if (addCollapse) {
-            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-        }
-        this._legendContent += additionalContent;
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            this._$legendDiv.append(additionalContent);
-            this.applyCollapse();
-        }
-    };
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=] - additonal content to add
-     */
-    LayerBase.prototype.addLegendContent = function (additionalContent) {
-        this._addLegendContent(additionalContent);
-    };
-    LayerBase.prototype.applyCollapse = function () {
-        if (this._applyCollapseCalled) {
-            console.log('collapse already applied');
-            return undefined;
-        }
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            var $expander = this._$legendDiv.find('.legend-items-expander');
-            if ($expander.length > 0) {
-                this._applyCollapseCalled = true;
-                $expander.click(function () {
-                    var $this = $(this);
-                    $this.siblings('ul').slideToggle();
-                    if ($this.hasClass('legend-layer-group-collapsed')) {
-                        $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&#9660;');
-                    }
-                    else {
-                        $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&#9654;');
-                    }
-                });
-                if (this._legendCollapse) {
-                    $expander.trigger('click');
-                }
-            }
-        }
-    };
-    /**
-     * trick to refresh the layer
-     */
-    LayerBase.prototype.refresh = function () {
-        if (this.source) {
-            this.source.refresh();
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "id", {
-        get: function () {
-            return this._id;
-        },
-        set: function (newId) {
-            this._id = newId;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "animate", {
-        get: function () {
-            return this._animate;
-        },
-        set: function (animate) {
-            this._animate = animate;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "legendContent", {
-        /**
-         * get the legend content
-         * @type {string}
-         */
-        get: function () {
-            return this._legendContent;
-        },
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        set: function (newVal) {
-            this._legendContent = newVal;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "params", {
-        /**
-         * get the map get params
-         * @type {object}
-         */
-        get: function () {
-            return this._params;
-        },
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        set: function (newParams) {
-            this._params = newParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minResolution", {
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxResolution", {
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minZoom", {
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxZoom", {
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "url", {
-        /**
-         * get the url
-         * @type {string}
-         */
-        get: function () {
-            return this._url;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "visible", {
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * set the visibility
-         * @param visibility
-         */
-        set: function (visibility) {
-            this.setVisible(visibility);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setVisible = function (visibility) {
-        this._visible = visibility;
-        if (this.olLayer) {
-            this.olLayer.setVisible(this._visible);
-            if (visibility && !this._loaded) {
-                this._load();
-            }
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "opacity", {
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-        get: function () {
-            return this._opacity;
-        },
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        set: function (opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "name", {
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-        get: function () {
-            return this._name;
-        },
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        set: function (newName) {
-            this._name = newName;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "loaded", {
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-        get: function () {
-            return this._loaded;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "source", {
-        /**
-         * get the layer source
-         * @type {*}
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getSource = function () {
-        return this._source;
-    };
-    Object.defineProperty(LayerBase.prototype, "zIndex", {
-        /**
-         * get the z index
-         */
-        get: function () {
-            return this._zIndex;
-        },
-        /**
-         * set the z index
-         */
-        set: function (newZ) {
-            this._zIndex = newZ;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setZIndex = function (newZ) {
-    };
-    Object.defineProperty(LayerBase.prototype, "olLayer", {
-        /**
-         * the the ol layer
-         */
-        get: function () {
-            return this.getOlLayer();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getOlLayer = function () {
-        return this._olLayer;
-    };
-    return LayerBase;
-}());
-exports.LayerBase = LayerBase;
-nm.LayerBase = LayerBase;
-exports.default = LayerBase;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util.checkDefined');
-/**
- * check if the input is undefined or null
- * @param input - input pointer
- * @returns true undefined or null
- */
-function undefinedOrNull(input) {
-    "use strict";
-    return (typeof input === 'undefined' || input === null);
-}
-exports.undefinedOrNull = undefinedOrNull;
-nm.undefinedOrNull = undefinedOrNull;
-/**
- * check if the input is defined and not null
- * @param input - input pointer
- * @returns true defined and not null
- */
-function definedAndNotNull(input) {
-    "use strict";
-    return !(undefinedOrNull(input));
-}
-exports.definedAndNotNull = definedAndNotNull;
-nm.definedAndNotNull = definedAndNotNull;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/7/2015.
- */
-var LayerBase_1 = __webpack_require__(8);
-var esriToOl = __webpack_require__(15);
-var mapPopup_1 = __webpack_require__(4);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-var LayerEsriMapServer = (function (_super) {
-    __extends(LayerEsriMapServer, _super);
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} [options] - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
-     */
-    function LayerEsriMapServer(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new ol.source.TileArcGISRest({
-            url: _this.url == '' ? undefined : _this.url,
-            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
-        });
-        _this._olLayer = new ol.layer.Tile({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
-        });
-        _this._olLayer.setZIndex(_this._zIndex);
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-        _this._esriFormat = new ol.format.EsriJSON();
-        _this._popupRequest = null;
-        _this.addLegendContent();
-        if (options.addPopup) {
-            mapPopup_1.default.addMapServicePopup(_this);
-        }
-        return _this;
-    }
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] !== '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'legend?f=pjson&callback=?';
-        $.get(urlCopy, {}, function (d) {
-            var newHtml = esriToOl.makeMapServiceLegend(d);
-            _super.prototype.addLegendContent.call(_this, newHtml);
-        }, 'json');
-    };
-    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
-        if (!this.visible) {
-            return;
-        }
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] != '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'identify?callback=?';
-        var __this = this;
-        if (this._popupRequest != null) {
-            this._popupRequest.abort();
-        }
-        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
-                var r = _a[_i];
-                var popupHtml = '<table class="esri-popup-table">';
-                for (var a in r['attributes']) {
-                    if (r['attributes'].hasOwnProperty(a)) {
-                        var attrVal = r['attributes'][a];
-                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                            continue;
-                        }
-                        var attr = a;
-                        if (attr.length > 14) {
-                            attr = attr.slice(0, 11) + '...';
-                        }
-                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
-                    }
-                }
-                popupHtml += '</table>';
-                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);
-            }
-        }, 'json');
-        this._popupRequest.always(function () {
-            __this._popupRequest = null;
-        });
-    };
-    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
-        /**
-         *
-         * @returns {ol.source.TileArcGISRest} the vector source
-         */
-        get: function () {
-            return _super.prototype.getSource.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
-        /**
-         *
-         * @returns the ol layer
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerEsriMapServer;
-}(LayerBase_1.LayerBase));
-exports.LayerEsriMapServer = LayerEsriMapServer;
-nm.LayerEsriMapServer = LayerEsriMapServer;
-exports.default = LayerEsriMapServer;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var checkDefined = __webpack_require__(9);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-var MapMoveCls = (function (_super) {
-    __extends(MapMoveCls, _super);
-    /**
-     * constructor called implicitly
-     */
-    function MapMoveCls() {
-        var _this = _super.call(this, 'map move') || this;
-        _this._arrLyrRequest = [];
-        _this._arrLyrTimeout = [];
-        _this._arrLayer = [];
-        _this._lookupLayer = {};
-        _this._mapMoveCallbacks = [];
-        _this._mapMoveCallbacksLookup = {};
-        _this._mapMoveCallbackDelays = [];
-        _this._mapMoveCallbackContext = [];
-        _this._mapMoveCallbackTimeout = [];
-        _this._mapExtent = undefined;
-        _this._zoomLevel = undefined;
-        return _this;
-    }
-    /**
-     * initialize the map move object
-     * @param theMap - the ol map
-     */
-    MapMoveCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-            _this._updateMapExtent();
-            // trigger the layer updates
-            for (var i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-            // trigger the map callbacks
-            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    };
-    MapMoveCls.prototype._updateMapExtent = function () {
-        var theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-        var extentArray = theView.calculateExtent(this.map.getSize());
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    };
-    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
-        /**
-         * return the map extent
-         */
-        get: function () {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-            return this._mapExtent;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Trigger the layer load
-     * @param lyr the layer being acted on
-     * @param index index of the layer
-     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
-        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        }
-        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        }
-        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-        // dummy callback used if before load returns false
-        var callbackFunc = function () { };
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-            var __this_1 = this;
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    var _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
-                        /**
-                         * @type {LayerBaseVector}
-                         */
-                        theLayer.mapMoveCallback(d);
-                        theLayer.loadCallback();
-                    }, 'json').fail(function (jqXHR) {
-                        if (jqXHR.statusText != 'abort') {
-                            console.log('failed');
-                            console.log(theLayer.url);
-                            console.log(theLayer.mapMoveParams);
-                        }
-                    }).always(function () {
-                        _innerThis._arrLyrTimeout[theIndex] = null;
-                        _innerThis._arrLyrRequest[theIndex] = null;
-                    });
-                }
-                innerFunction.call(__this_1, lyr, index);
-            };
-        }
-        else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    };
-    /**
-     * trigger the map move call back at the given index
-     * @param ind - the index of the layer
-     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
-     * @param functionId=undefined the function id used to reference the added callback function
-     */
-    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
-        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
-            throw 'either the function index or the id must be defined';
-        }
-        if (typeof ind !== 'number') {
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-        if (ind < 0) {
-            console.log('function not found');
-            return;
-        }
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-        var ctx = this._mapMoveCallbackContext[ind];
-        var theFunc = this._mapMoveCallbacks[ind];
-        var __this = this;
-        var f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);
-            }
-            else {
-                theFunc(__this._mapExtent, __this._zoomLevel, eventType);
-            }
-        };
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    };
-    /**
-     * Add a layer to the interaction
-     * @param  lyr - layer to add
-     * @param triggerOnAdd - if the layer should be loaded on add
-     */
-    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
-        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-            return;
-        }
-        this._checkInit();
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    };
-    /**
-     * add a callback to the map move event
-     * @param func - callback function
-     * @param context - the context to use for this function
-     * @param delay=50 the delay before call load
-     * @param triggerOnAdd if the layer should be loaded on add to mapMove
-     * @param functionId optional id to reference the function later for outside triggering
-     */
-    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-            return;
-        }
-        this._checkInit();
-        if (!functionId) {
-            functionId = makeGuid_1.default();
-        }
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = functionId;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    };
-    return MapMoveCls;
-}(mapInteractionBase_1.default));
-exports.MapMoveCls = MapMoveCls;
-nm.MapMoveCls = MapMoveCls;
-exports.default = MapMoveCls;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-var FeatureLayerProperties = (function () {
-    /**
-     *
-     * @param feature the feature
-     * @param layer - the layer in the popup
-     * @param layerIndex - index of the layer
-     * @param selectionLayer - the ol selection layer
-     * @param [esriLayerName=undefined] - esri layer name
-     */
-    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
-        get: function () {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            }
-            else {
-                return this.layer.name;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FeatureLayerProperties;
-}());
-exports.FeatureLayerProperties = FeatureLayerProperties;
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-var MapPopupCls = (function (_super) {
-    __extends(MapPopupCls, _super);
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-    /**
-     * map popup constructor
-     */
-    function MapPopupCls() {
-        var _this = _super.call(this, 'map popup') || this;
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayerNames = [];
-        _this._arrPopupLayers = [];
-        _this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        _this._esriMapServiceLayers = [];
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-        _this._passThroughLayerFeatureArray = [];
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-        return _this;
-    }
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-    MapPopupCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        var $map;
-        var target = this.map.getTarget();
-        if (typeof target == 'string') {
-            $map = $('#' + target);
-        }
-        else {
-            $map = $(target);
-        }
-        $map.append('<div class="ol-popup">' +
-            '<span class="ol-popup-closer">X</span>' +
-            '<div class="popup-content"></div>' +
-            '</div>');
-        this._$popupContainer = $map.find('.ol-popup');
-        this._$popupContent = $map.find('.popup-content');
-        this._$popupCloser = $map.find('.ol-popup-closer');
-        var _ease = function (n) {
-            return ol.easing.inAndOut(n);
-        };
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
-            autoPanAnimation: {
-                duration: 250,
-                source: theMap.getView().getCenter(),
-                easing: _ease
-            }
-        });
-        this._map.addOverlay(this._popupOverlay);
-        this._$popupCloser.click(function (evt) {
-            _this.closePopup();
-        });
-        // display popup on click
-        this._map.on('singleclick', function (evt) {
-            _this.closePopup();
-            _this._popupCoordinate = evt['coordinate'];
-            // esri map service layers
-            if (_this._esriMapServiceLayers.length > 0) {
-                var queryParams = {
-                    geometry: evt['coordinate'].join(','),
-                    geometryType: 'esriGeometryPoint',
-                    layers: 'all',
-                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
-                    imageDisplay: _this._map.getSize().join(',') + ',96',
-                    returnGeometry: true,
-                    tolerance: 15,
-                    f: 'pjson'
-                };
-                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
-                    var l = _a[_i];
-                    l.getPopupInfo(queryParams);
-                }
-            }
-            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
-            _this._passThroughLayerFeatureArray = [];
-            _this._currentPopupIndex = -1;
-            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                var featObj = layerFeatureObjectArray[i];
-                var props = featObj.feature.getProperties();
-                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
-                //skip if return was false
-                if (popupContentResponse === false) {
-                    //continue;
-                }
-                else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
-                    _this._passThroughLayerFeatureArray.push(featObj);
-                }
-                else {
-                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                }
-            }
-            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
-            _this._currentPopupIndex = -1;
-            var popupHtml = '<div class="ol-popup-nav">';
-            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
-            popupHtml += "<span>&nbsp;of&nbsp;</span>";
-            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
-            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
-            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
-            popupHtml += '</div>';
-            popupHtml += '<div class="ol-popup-inner">';
-            popupHtml += '</div>';
-            _this._$popupContent.html(popupHtml);
-            _this._$popupContent.find('.previous-popup').click(function () {
-                if (_this._popupContentLength == 1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == 0) {
-                    _this._currentPopupIndex = _this._popupContentLength - 1;
-                }
-                else {
-                    _this._currentPopupIndex--;
-                }
-                _this._triggerFeatSelect();
-            });
-            var nextPopup = _this._$popupContent.find('.next-popup');
-            nextPopup.click(function () {
-                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
-                    _this._currentPopupIndex = 0;
-                }
-                else {
-                    _this._currentPopupIndex++;
-                }
-                _this._triggerFeatSelect();
-            });
-            if (_this._popupContentLength > 0) {
-                nextPopup.trigger('click');
-                _this._popupOverlay.setPosition(_this._popupCoordinate);
-                _this._$popupContent.scrollTop(0);
-                _this._popupOpen = true;
-            }
-        });
-        //change mouse cursor when over marker
-        this._map.on('pointermove', function (evt) {
-            if (evt['dragging']) {
-                return;
-            }
-            var pixel = _this.map.getEventPixel(evt['originalEvent']);
-            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
-                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
-                    var olLayer = _a[_i];
-                    if (lyrCandidate == olLayer) {
-                        return true;
-                    }
-                }
-                return false;
-            });
-            var mapElement = _this.map.getTargetElement();
-            mapElement.style.cursor = hit ? 'pointer' : '';
-        });
-        return true;
-    };
-    /**
-     * helper to select features
-     * @private
-     */
-    MapPopupCls.prototype._triggerFeatSelect = function () {
-        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-        this.clearSelection();
-        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-        $layerNameSpan.html(lyrFeatObj.layerName);
-        $innerPopup.html(lyrFeatObj.popupContent);
-        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f(this._$popupContent);
-        }
-    };
-    /**
-     *
-     * @param feature - the ol feature
-     * @param {LayerEsriMapServer} lyr - the map server layer
-     * @param {string} popupContent - popup content
-     * @param {string} esriName - esri layer name
-     */
-    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
-        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
-        featLayerObject.popupContent = popupContent;
-        this._passThroughLayerFeatureArray.push(featLayerObject);
-        this._popupContentLength++;
-        $('.popup-content-length').html(this._popupContentLength.toFixed());
-        if (!this._popupOpen) {
-            this._$popupContent.find('.next-popup').trigger('click');
-            this._popupOverlay.setPosition(this._popupCoordinate);
-            this._$popupContent.scrollTop(0);
-            this._popupOpen = true;
-        }
-    };
-    /**
-     *
-     * @param  pixel - the ol pixel
-     * @returns  feature layer properties
-     * @private
-     */
-    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
-        var _this = this;
-        var layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
-            }
-        });
-        return layerFeatureObjectArray;
-    };
-    MapPopupCls.prototype.closePopup = function () {
-        this._checkInit();
-        this._popupOpen = false;
-        this._popupOverlay.setPosition(undefined);
-        this._$popupCloser[0].blur();
-        this.clearSelection();
-        this._$popupContent.html('');
-        return false;
-    };
-    ;
-    /**
-     *
-     * @param chgFunction - popup change function
-     */
-    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
-        this._popupChangedFunctions.push(chgFunction);
-    };
-    /**
-     *
-     * @param {LayerBase|*} lyr - the layer being acted on
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns  the new selection layer
-     * @private
-     */
-    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
-        this._checkInit();
-        selectionStyle = selectionStyle || {};
-        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-        selectionStyle.width = selectionStyle.width || 10;
-        var theStyle;
-        if (selectionStyle.olStyle) {
-            theStyle = selectionStyle.olStyle;
-        }
-        else {
-            theStyle = new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: selectionStyle.color,
-                    width: selectionStyle.width
-                }),
-                image: new ol.style.Circle({
-                    radius: 7,
-                    fill: new ol.style.Fill({ color: selectionStyle.color }),
-                    stroke: new ol.style.Stroke({ color: selectionStyle.color, width: 1 })
-                }),
-                fill: new ol.style.Fill({
-                    color: selectionStyle.color
-                })
-            });
-        }
-        var selectionLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: theStyle
-        });
-        selectionLayer.setZIndex(100);
-        this._selectionLayers.push(selectionLayer);
-        this._selectionLayerLookup[lyr.id] = selectionLayer;
-        this.map.addLayer(selectionLayer);
-        return selectionLayer;
-    };
-    /**
-     * Add popup to the map
-     * @param {LayerBase|*} lyr The layer that the popup with act on
-     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._arrPopupLayerIds.push(lyr.id);
-        this._arrPopupLayerNames.push(lyr.name);
-        this._arrPopupLayers.push(lyr);
-        this._arrPopupOlLayers.push(lyr.olLayer);
-        this._arrPopupContentFunction.push(popupContentFunction);
-        return selectionLayer;
-    };
-    ;
-    /**
-     *
-     * @param {LayerBase} lyr - layer
-     */
-    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
-        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
-        if (idx > -1) {
-            this._arrPopupLayerIds.splice(idx, 1);
-            this._arrPopupLayerNames.splice(idx, 1);
-            this._arrPopupLayers.splice(idx, 1);
-            this._arrPopupOlLayers.splice(idx, 1);
-            this._arrPopupContentFunction.splice(idx, 1);
-            this._selectionLayers.splice(idx, 1);
-            delete this._selectionLayerLookup[lyr.id];
-        }
-    };
-    /**
-     *
-     * @param {LayerEsriMapServer} lyr - map server layer
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._esriMapServiceLayers.push(lyr);
-        return selectionLayer;
-    };
-    MapPopupCls.prototype.clearSelection = function () {
-        this._checkInit();
-        for (var i = 0; i < this._selectionLayers.length; i++) {
-            this._selectionLayers[i].getSource().clear();
-        }
-        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f();
-        }
-    };
-    ;
-    /**
-     * Add a function to be called when the map is clicked but before any popups are implemented
-     * @param {function} func - the map click function
-     */
-    MapPopupCls.prototype.addMapClickFunction = function (func) {
-        this._mapClickFunctions.push(func);
-    };
-    return MapPopupCls;
-}(mapInteractionBase_1.default));
-exports.MapPopupCls = MapPopupCls;
-nm.MapPopupCls = MapPopupCls;
-exports.default = MapPopupCls;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param [options={}] config options
- * @param [options.divId=map] map div id
- * @param [options.center={}] center config object
- * @param [options.center.x=-10018378] center x, web mercator x or lon
- * @param [options.center.y=5574910] center y, web mercator y or lat
- * @param [options.zoom=7] zoom level
- * @param [options.minZoom=undefined] min zoom
- * @param [options.maxZoom=undefined] max zoom
- * @param [options.baseSwitcher=true] if add base map switcher
- * @param [options.fullScreen=false] if add base map switcher
- * @returns the ol map
- */
-function quickMapBase(options) {
-    if (options === void 0) { options = {}; }
-    options.divId = options.divId || 'map';
-    options.center = options.center || { x: -10018378, y: 5574910 };
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-    var $mapDiv = $('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-    var osmLayer = new ol.layer.Tile({ source: new ol.source.OSM() });
-    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-    if (options.baseSwitcher) {
-        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-        //  switcherContent += '"></div>';
-        //  $mapDiv.append(switcherContent);
-        //
-        // $mapDiv.find('.base-map-switcher').click(function() {
-        //      "use strict";
-        //      osmLayer.setVisible(!osmLayer.getVisible());
-        //      satLayer.setVisible(!satLayer.getVisible());
-        //
-        //      if (osmLayer.getVisible()){
-        //          $(this).css('background', aerialCss);
-        //      } else {
-        //          $(this).css('background', osmCss);
-        //      }
-        //  });
-    }
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new ol.geom.Point([options.center.x, options.center.y]);
-        new ol.proj.Projection({ code: "EPSG:4326" });
-        p.transform(new ol.proj.Projection({ code: "EPSG:4326" }), new ol.proj.Projection({ code: "EPSG:3857" }));
-        var coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-    var controls = ol.control.defaults({
-        attributionOptions: { collapsible: false }
-    });
-    var view = new ol.View({
-        center: [options.center.x, options.center.y],
-        zoom: options.zoom,
-        minZoom: options.minZoom,
-        maxZoom: options.maxZoom
-    });
-    var map = new ol.Map({
-        layers: [osmLayer],
-        target: options.divId,
-        controls: controls,
-        view: view
-    });
-    if (options.fullScreen) {
-        map.addControl(new ol.control.FullScreen({}));
-    }
-    return map;
-}
-exports.quickMapBase = quickMapBase;
-nm.quickMapBase = quickMapBase;
-exports.default = quickMapBase;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers.zoomResolutionConvert');
-var _zoomResLookup = [
-    156543.03392804097,
-    78271.51696402048,
-    39135.75848201024,
-    19567.87924100512,
-    9783.93962050256,
-    4891.96981025128,
-    2445.98490512564,
-    1222.99245256282,
-    611.49622628141,
-    305.748113140705,
-    152.8740565703525,
-    76.43702828517625,
-    38.21851414258813,
-    19.109257071294063,
-    9.554628535647032,
-    4.777314267823516,
-    2.388657133911758,
-    1.194328566955879,
-    0.5971642834779395,
-    0.29858214173896974,
-    0.14929107086948487,
-    0.07464553543474244,
-    0.03732276771737122,
-    0.01866138385868561,
-    0.009330691929342804,
-    0.004665345964671402,
-    0.002332672982335701,
-    0.0011663364911678506,
-    0.0005831682455839253 //28
-];
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-function zoomToResolution(zoomLevel) {
-    "use strict";
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        }
-        else {
-            console.log("invalid zoom level provided: " + zoomLevel);
-            return undefined;
-        }
-    }
-    else {
-        return undefined;
-    }
-}
-exports.zoomToResolution = zoomToResolution;
-nm.zoomToResolution = zoomToResolution;
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
-        if (resolution >= _zoomResLookup[i]) {
-            return i;
-        }
-    }
-    return 0;
-}
-exports.resolutionToZoom = resolutionToZoom;
-nm.resolutionToZoom = resolutionToZoom;
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 1/4/2016.
- */
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var nm = provide_1.default('olHelpers.esriToOlStyle');
-/**
- * This callback is displayed as part of the Requester class.
- * @callback styleFunc
- * @param {ol.Feature} feat - openlayers feature
- * @param {number} resolution - map resolution
- */
-/**
- *
- * @param {Array<number>} colorArray - input color array
- * @param {number} opacity - the opacity 0 to 1
- * @returns {string} rgba string
- * @private
- */
-function _colorArrayToRgba(colorArray, opacity) {
-    "use strict";
-    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
-}
-/**
- * escape html charcters
- * @param {string} str - input string
- * @returns {string} escaped string
- */
-function htmlEscape(str) {
-    return String(str)
-        .replace(/&/g, '&amp;')
-        .replace(/"/g, '&quot;')
-        .replace(/'/g, '&#39;')
-        .replace(/</g, '&lt;')
-        .replace(/>/g, '&gt;');
-}
-nm.htmlEscape = htmlEscape;
-var CommonSymbol = (function () {
-    /**
-     *
-     * @param symbolObj
-     * @param {number} opacity
-     */
-    function CommonSymbol(symbolObj, opacity) {
-        this.symbolObj = symbolObj;
-        this.opacity = opacity;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return CommonSymbol;
-}());
-var PointSymbol = (function (_super) {
-    __extends(PointSymbol, _super);
-    function PointSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSMS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                var radius = _this.symbolObj.size;
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Circle({
-                        radius: radius,
-                        fill: new ol.style.Fill({
-                            color: innerColor
-                        }),
-                        stroke: new ol.style.Stroke({ color: outerColor, width: outlineWidth })
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
-                break;
-            case 'esriPMS':
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Icon({ src: "data:image/png;base64," + _this.symbolObj['imageData'] })
-                });
-                _this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + _this.symbolObj['imageData'] + "\">";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PointSymbol;
-}(CommonSymbol));
-var LineSymbol = (function (_super) {
-    __extends(LineSymbol, _super);
-    function LineSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSLS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var lineWidth = _this.symbolObj.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: innerColor,
-                        //lineDash: [4],
-                        width: lineWidth
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 4px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: -1px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return LineSymbol;
-}(CommonSymbol));
-var PolygonSymbol = (function (_super) {
-    __extends(PolygonSymbol, _super);
-    function PolygonSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj['type']) {
-            case 'esriSFS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: outerColor,
-                        //lineDash: [4],
-                        width: outlineWidth
-                    }),
-                    fill: new ol.style.Fill({
-                        color: innerColor
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "border: solid " + outerColor + " 1px;";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 9px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: 2px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PolygonSymbol;
-}(CommonSymbol));
-var SymbolGenerator = (function () {
-    function SymbolGenerator(esriResponse) {
-        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-        this.renderer = esriResponse.drawingInfo.renderer;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return SymbolGenerator;
-}());
-var SingleSymbol = (function (_super) {
-    __extends(SingleSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the symbol class to use
-     */
-    function SingleSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.symbol = _this.renderer.symbol;
-        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);
-        _this.olStyle = symbolObj.olStyle;
-        _this.legendHtml = symbolObj.legendHtml;
-        return _this;
-    }
-    return SingleSymbol;
-}(SymbolGenerator));
-var UniqueValueSymbol = (function (_super) {
-    __extends(UniqueValueSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the Symbol class definition
-     */
-    function UniqueValueSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];
-        _this.propertyName = _this.renderer['field1'];
-        _this.defaultSymbol = _this.renderer['defaultSymbol'];
-        if (_this.defaultSymbol) {
-            var symbolObj = new SymbolClass(_this.defaultSymbol, _this.opacity);
-            _this.defaultStyle = symbolObj.olStyle;
-            _this.defaultLabelHtml = "<span class=\"legend-layer-subitem\">" + htmlEscape(_this.renderer['defaultLabel']) + "</span>" + symbolObj.legendHtml;
-        }
-        else {
-            _this.defaultStyle = undefined;
-            _this.defaultLabelHtml = 'other';
-        }
-        _this.valueArray = [];
-        _this.labelArray = [];
-        _this.legendArray = [];
-        _this.propertyStyleLookup = {};
-        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {
-            var uniqueVal = _a[_i];
-            _this.labelArray.push(uniqueVal['label']);
-            _this.valueArray.push(uniqueVal['value']);
-            var uniqueSym = new SymbolClass(uniqueVal.symbol, _this.opacity);
-            _this.legendArray.push("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>" + uniqueSym.legendHtml);
-            _this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
-        }
-        _this.olStyle = function (feature) {
-            var checkProperties = feature.getProperties();
-            var checkProperty = checkProperties[_this.propertyName];
-            var returnValue;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
-            }
-            else {
-                returnValue = [_this.defaultStyle];
-            }
-            return returnValue;
-        };
-        if (_this.defaultLabelHtml !== null) {
-            _this.legendArray.push(_this.defaultLabelHtml);
-        }
-        _this.legendHtml = '<ul>';
-        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {
-            var h = _c[_b];
-            _this.legendHtml += "<li>" + h + "</li>";
-        }
-        _this.legendHtml += '</ul>';
-        return _this;
-    }
-    return UniqueValueSymbol;
-}(SymbolGenerator));
-/**
- * style and legend object
- * @typedef {object} styleAndLegend
- * @property {styleFunc} style - style function
- * @property {string} legend - legend content
- */
-/**
- *
- * @param {object} esriResponse - layer info
- * @returns {styleAndLegend} style and legend object
- */
-function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    "use strict";
-    var renderer = esriResponse.drawingInfo.renderer;
-    var symbolLegendOut = null;
-    switch (renderer.type) {
-        case 'simple':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse.geometryType + ' not handled');
-            }
-            break;
-        case 'uniqueValue':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        default:
-            alert('not handled renderer type: ' + renderer['type']);
-    }
-    if (symbolLegendOut == null) {
-        return { style: undefined, legend: '' };
-    }
-    else {
-        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
-    }
-}
-exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-/**
- *
- * @param {object} lyrObject - the layer as defined in the response
- * @param {boolean} [skipLayerNameAndExpander=false] use only icons
- * @returns {string} legend html
- */
-function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
-    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
-    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
-    var layerName = lyrObject['layerName'];
-    var legendItems = lyrObject['legend'];
-    var legendHtml = '';
-    if (!skipLayerNameAndExpander) {
-        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
-    }
-    if (legendItems.length == 1) {
-        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
-    }
-    else {
-        if (!skipLayerNameAndExpander) {
-            legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
-        }
-        legendHtml += '<ul>';
-        for (var i = 0; i < legendItems.length; i++) {
-            legendHtml += "<li>";
-            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
-            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
-            legendHtml += "</li>";
-        }
-        legendHtml += '</ul>';
-    }
-    if (!skipLayerNameAndExpander) {
-        legendHtml = "<span class=\"legend-layer-subitem\">" + layerName + "</span>" + legendHtml;
-    }
-    return legendHtml;
-}
-/**
- * make map service legent
- * @param {object} esriResponse - layer info
- * @returns {string} legend content
- */
-function makeMapServiceLegend(esriResponse) {
-    "use strict";
-    var newLegendHtml = '';
-    var layers = esriResponse['layers'];
-    if (layers.length == 1) {
-        newLegendHtml += mapServiceLegendItem(layers[0], true);
-    }
-    else {
-        newLegendHtml += '<ul>';
-        for (var i = 0; i < layers.length; i++) {
-            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
-        }
-        newLegendHtml += '</ul>';
-    }
-    return newLegendHtml;
-}
-exports.makeMapServiceLegend = makeMapServiceLegend;
-nm.makeMapServiceLegend = makeMapServiceLegend;
-
-
-/***/ }),
-/* 16 */,
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var range_change_1 = __webpack_require__(18);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('domUtil');
-/**
- * @callback mediaCallback
- * @param {number} tm
- */
-function timeToLocalDateString(tm) {
-    "use strict";
-    var d = new Date(tm);
-    var p1 = d.toLocaleTimeString().split(' ');
-    var p2 = p1[0].split(':');
-    p2 = p2.slice(0, 2);
-    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
-}
-var MediaControl = (function () {
-    /**
-     *
-     * @param element
-     * @param changeFunc
-     * @param mediaConfig
-     */
-    function MediaControl(element, changeFunc, mediaConfig) {
-        if (changeFunc === void 0) { changeFunc = function () { return; }; }
-        if (mediaConfig === void 0) { mediaConfig = {}; }
-        var _this = this;
-        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;
-        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;
-        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;
-        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;
-        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;
-        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;
-        if (typeof element == 'string') {
-            this._container = $('#' + element);
-        }
-        else if (typeof element['style'] !== 'undefined') {
-            this._container = $(element);
-        }
-        else {
-            this._container = element;
-        }
-        this._container.addClass('media-control-container');
-        this._playInterval = mediaConfig.playInterval;
-        this._changeFunc = changeFunc;
-        this._showAsDate = mediaConfig.showAsDate;
-        this._currentValue = undefined;
-        this._min = undefined;
-        this._max = undefined;
-        this._step = undefined;
-        this._playing = false;
-        var htmlStr = '<span class="media-player-button media-back"></span>' +
-            '<span class="media-player-button media-play"></span>' +
-            '<span class="media-player-button media-pause media-disabled"></span>' +
-            '<span class="media-player-button media-stop media-disabled" ></span>' +
-            '<span class="media-player-button media-ahead"></span>' +
-            "<input type=\"range\">" +
-            "<div class=\"media-control-value-label-container\">" +
-            "<span class=\"media-control-value-label-min\"></span>" +
-            "<span class=\"media-control-value-label-val\"></span>" +
-            "<span class=\"media-control-value-label-max\"></span>" +
-            "</div>";
-        this._container.append(htmlStr);
-        // let btnPause = this._container.find('.media-pause');
-        var btnPlay = this._container.find('.media-play');
-        this._$btnStop = this._container.find('.media-stop');
-        var btnAhead = this._container.find('.media-ahead');
-        var btnBack = this._container.find('.media-back');
-        this._$slider = this._container.find('input[type=range]');
-        this._$valLabelMin = this._container.find('.media-control-value-label-min');
-        this._$valLabelVal = this._container.find('.media-control-value-label-val');
-        this._$valLabelMax = this._container.find('.media-control-value-label-max');
-        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);
-        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);
-        var ___this = this;
-        btnPlay.click(function () {
-            var $this = $(this);
-            $this.addClass('media-disabled');
-            ___this._$btnStop.removeClass('media-disabled');
-            btnAhead.addClass('media-locked');
-            btnBack.addClass('media-locked');
-            ___this._$slider.prop('disabled', true);
-            ___this._playing = true;
-            ___this._interval = setInterval(function () {
-                ___this.currentValue += ___this._step;
-            }, ___this._playInterval);
-        });
-        this._$btnStop.click(function () {
-            clearInterval(___this._interval);
-            var $this = $(this);
-            $this.addClass('media-disabled');
-            btnPlay.removeClass('media-disabled');
-            btnAhead.removeClass('media-locked');
-            btnBack.removeClass('media-locked');
-            ___this._$slider.prop('disabled', false);
-            ___this._playing = false;
-        });
-        btnAhead.click(function () {
-            ___this.currentValue = ___this.currentValue + ___this._step;
-        });
-        btnBack.click(function () {
-            ___this.currentValue = ___this.currentValue - ___this._step;
-        });
-    }
-    MediaControl.prototype.stopPlaying = function () {
-        if (this._playing) {
-            this._$btnStop.trigger('click');
-        }
-    };
-    Object.defineProperty(MediaControl.prototype, "playing", {
-        get: function () {
-            return this._playing;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "min", {
-        get: function () {
-            return this._min;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "max", {
-        get: function () {
-            return this._max;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "step", {
-        get: function () {
-            return this._step;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "currentValue", {
-        get: function () {
-            return this._currentValue;
-        },
-        set: function (newValue) {
-            if (newValue > this._max) {
-                newValue = this._min;
-            }
-            else if (newValue < this._min) {
-                newValue = this._max;
-            }
-            this._currentValue = newValue;
-            this._$slider.val(this._currentValue.toFixed(2));
-            if (this._showAsDate) {
-                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            }
-            else {
-                this._$valLabelVal.html(this.currentValue.toString());
-            }
-            this._changeFunc(newValue);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * set min and max value with step
-     * @param {number} newMin the new min
-     * @param {number} newMax the new mas
-     * @param {number} [newValue=newMin] the value to set
-     * @param {number} [newStep=(newMax-newMin)/20] step value
-     */
-    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
-        this._min = newMin;
-        this._max = newMax;
-        newValue = typeof newValue == 'number' ? newValue : newMin;
-        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
-        this._currentValue = newValue;
-        this._step = newStep;
-        this._$slider.prop('min', this.min.toString());
-        this._$slider.prop('max', this.max.toString());
-        this._$slider.prop('step', this.step.toString());
-        this._$slider.val(this.currentValue.toString());
-        if (this._showAsDate) {
-            this._$valLabelMin.html(timeToLocalDateString(this._min));
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            this._$valLabelMax.html(timeToLocalDateString(this._max));
-        }
-        else {
-            this._$valLabelMin.html(this._min.toString());
-            this._$valLabelVal.html(this.currentValue.toString());
-            this._$valLabelMax.html(this._max.toString());
-        }
-    };
-    Object.defineProperty(MediaControl.prototype, "changeFunction", {
-        /**
-         *
-         * @param {mediaCallback} newFunc the callback on change
-         */
-        set: function (newFunc) {
-            this._changeFunc = newFunc;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return MediaControl;
-}());
-exports.MediaControl = MediaControl;
-nm.MediaControl = MediaControl;
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('domUtil');
-var mouseIn = false;
-var mouseDown = false;
-var timeout = null;
-var dragged = false;
-var lastVal;
-/**
- * Created by gavorhes on 11/2/2015.
- */
-function triggerCallback(callback, evt) {
-    "use strict";
-    var val = parseFloat(this.value);
-    var min = parseFloat(this.min);
-    var max = parseFloat(this.max);
-    var step = parseFloat(this.step);
-    if (max - val < step) {
-        val = max;
-    }
-    var percent = (val - min) / (max - min);
-    if (typeof lastVal == 'number' && val == lastVal) {
-        return;
-    }
-    lastVal = val;
-    callback(val, percent, evt);
-}
-/**
- * Add a variety of listeners for range inputs applied to a common callback
- * @param  $slider - jquery reference to the slider
- * @param {rangeChangeCallback} callback - the callback
- * @param {number} [changeTimeout=75] before the callback is called
- * @this {jQuery}
- * @returns {jQuery} the jQuery object
- */
-function rangeChange($slider, callback, changeTimeout) {
-    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
-    $slider.mouseenter(function () {
-        mouseIn = true;
-    });
-    $slider.mouseleave(function () {
-        mouseIn = false;
-        mouseDown = false;
-    });
-    $slider.mousedown(function () {
-        mouseDown = true;
-    });
-    $slider.mouseup(function () {
-        mouseDown = false;
-    });
-    $slider.mousemove(
-    /**
-     *
-     * @param {object} evt - event properties
-     * @this {HTMLElement}
-     */
-    function (evt) {
-        if (!(mouseIn && mouseDown)) {
-            return;
-        }
-        dragged = true;
-        if (lastVal == this['value']) {
-            return;
-        }
-        lastVal = this['value'];
-        if (timeout != null) {
-            clearTimeout(timeout);
-        }
-        var _this = this;
-        timeout = setTimeout(function () {
-            triggerCallback.call(_this, callback, evt);
-            timeout = null;
-        }, changeTimeout);
-    });
-    $slider.keyup(
-    /**
-     *
-     * @param {object} evt - event properties
-     */
-    function (evt) {
-        if (evt.keyCode == 37 || evt.keyCode == 39) {
-            triggerCallback.call(this, callback, evt);
-        }
-    });
-    $slider.change(function (evt) {
-        if (dragged) {
-            dragged = false;
-            return;
-        }
-        triggerCallback.call(this, callback, evt);
-    });
-    return this;
-}
-exports.rangeChange = rangeChange;
-nm.rangeChange = rangeChange;
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBase_1 = __webpack_require__(8);
-var mapMove_1 = __webpack_require__(6);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The Vector layer base
- * @augments LayerBase
- * @abstract
- */
-var LayerBaseVector = (function (_super) {
-    __extends(LayerBaseVector, _super);
-    /**
-     * The base vector layer
-     * @param {string} url - pass an empty string to prevent default load and add from a json source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     */
-    function LayerBaseVector(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        options = options;
-        //prevent regular load if no url has been provided
-        if (_this.url.trim() == '') {
-            _this._loaded = true;
-        }
-        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
-        if (_this.visible) {
-            _this._autoLoad = true;
-        }
-        else {
-            _this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
-        }
-        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
-        if (options.mapMoveObj) {
-            _this._mapMove = options.mapMoveObj;
-        }
-        else {
-            _this._mapMove = _this._onDemand ? mapMove_1.default : undefined;
-        }
-        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
-            function () { return {}; };
-        if (_this._onDemand) {
-            _this._loaded = true;
-            _this._mapMoveParams = {};
-            _this._mapMove.checkInit();
-            _this._mapMove.addVectorLayer(_this);
-        }
-        _this._source = new ol.source.Vector();
-        _this._olLayer = new ol.layer.Vector({
-            source: _this._source,
-            visible: _this.visible,
-            style: _this.style,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution,
-            renderOrder: options.renderOrder
-        });
-        _this.olLayer.setZIndex(_this._zIndex);
-        _this._projectionMap = null;
-        _this._projection4326 = new ol.proj.Projection({ code: "EPSG:4326" });
-        return _this;
-    }
-    /**
-     * dummy to be overridden
-     * @param {object} featureCollection - geojson or esrijson object
-     */
-    LayerBaseVector.prototype.addFeatures = function (featureCollection) {
-        console.log('Layer vector base addFeatures is a placeholder and does nothing');
-    };
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {
-        if (this.minZoom !== undefined) {
-            if (zoom < this.minZoom) {
-                return false;
-            }
-        }
-        if (this.maxZoom !== undefined) {
-            if (zoom > this.maxZoom) {
-                return false;
-            }
-        }
-        return this.visible;
-    };
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        this._mapMoveParams = {};
-        $.extend(this._mapMoveParams, this.params);
-        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-    };
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    LayerBaseVector.prototype.mapMoveCallback = function (d) {
-        if (this.source) {
-            this._source.clear();
-        }
-    };
-    /**
-     * clear features in the layer
-     */
-    LayerBaseVector.prototype.clear = function () {
-        if (this._source) {
-            this._source.clear();
-        }
-    };
-    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
-        /**
-         * get on demand delay in miliseconds
-         */
-        get: function () {
-            return this._onDemandDelay;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
-        /**
-         * get if the layer is autoloaded
-         */
-        get: function () {
-            return this._autoLoad;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "style", {
-        /**
-         * get the style definition
-         */
-        get: function () {
-            return this._style;
-        },
-        /**
-         * set the style
-         * @param style - the style or function
-         */
-        set: function (style) {
-            this._style = style;
-            this.olLayer.setStyle(this._style);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
-        /**
-         * get the map CRS if it is defined by the map move object
-         */
-        get: function () {
-            return this.mapProj == null ? null : this.mapProj.getCode();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapProj", {
-        get: function () {
-            if (this._projectionMap != null) {
-                return this._projectionMap;
-            }
-            if (this._mapMove) {
-                this._projectionMap = this._mapMove.map.getView().getProjection();
-                return this._projectionMap;
-            }
-            else {
-                return null;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
-        /**
-         * get the map move object
-         * @type {MapMoveCls|*}
-         */
-        get: function () {
-            return this._mapMove;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
-        /**
-         * map move params
-         * @type {object}
-         */
-        get: function () {
-            return this._mapMoveParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "visible", {
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * Set the layer visibility
-         * @type {boolean}
-         * @override
-         */
-        set: function (visibility) {
-            _super.prototype.setVisible.call(this, visibility);
-            if (this._onDemand) {
-                this.mapMove.triggerLyrLoad(this);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "source", {
-        /**
-         * get the layer vector source
-         * @override
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "features", {
-        /**
-         * array of ol features
-         */
-        get: function () {
-            return this.source.getFeatures();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
-        /**
-         *
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBaseVector.prototype.setZIndex = function (newZ) {
-        this.olLayer.setZIndex(newZ);
-    };
-    return LayerBaseVector;
-}(LayerBase_1.LayerBase));
-exports.LayerBaseVector = LayerBaseVector;
-nm.LayerBaseVector = LayerBaseVector;
-exports.default = LayerBaseVector;
-
-
-/***/ }),
-/* 20 */,
-/* 21 */,
-/* 22 */,
-/* 23 */,
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVector_1 = __webpack_require__(19);
-var esriToOl = __webpack_require__(15);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * Base layer for esri vector layers
- * @augments LayerBaseVector
- */
-var LayerBaseVectorEsri = (function (_super) {
-    __extends(LayerBaseVectorEsri, _super);
-    /**
-     * The base vector layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} [options.where=1=1] the layer filter clause
-     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all
-     * @param {string} [options.format=pjson] the format the retrieve the data
-     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
-     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
-     */
-    function LayerBaseVectorEsri(url, options) {
-        var _this = this;
-        if (typeof options.params != 'object') {
-            options.params = {};
-        }
-        options.params['where'] = options.where || '1=1';
-        options.params['outFields'] = options.outFields || '*';
-        options.params['f'] = options.format || 'pjson';
-        options.params['outSR'] = options.outSR || 3857;
-        _this = _super.call(this, url, options) || this;
-        _this._outSR = _this.params['outSR'];
-        _this._esriFormat = new ol.format.EsriJSON();
-        if (_this._url[_this._url.length - 1] !== '/') {
-            _this._url += '/';
-        }
-        _this._urlCopy = _this.url;
-        _this._url += 'query?callback=?';
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
-        }
-        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-        if (_this._useEsriStyle) {
-            _this.addLegendContent();
-        }
-        return _this;
-    }
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content to add to legend
-     */
-    LayerBaseVectorEsri.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        if (!this._useEsriStyle) {
-            _super.prototype.addLegendContent.call(this, additionalContent);
-        }
-        else {
-            $.get(this._urlCopy + '?f=pjson&callback=?', {}, function (d) {
-                if (d['subLayers'].length > 0) {
-                    alert('should only use single feature layers, not groups');
-                    return;
-                }
-                var newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
-                _this.style = newStyleAndLegend.style;
-                _super.prototype.addLegendContent.call(_this, newStyleAndLegend.legend);
-            }, 'json');
-        }
-    };
-    /**
-     * add feature collection
-     * @param {object} featureCollection - features as esrijson
-     */
-    LayerBaseVectorEsri.prototype.addFeatures = function (featureCollection) {
-        var feats = this._esriFormat.readFeatures(featureCollection);
-        this.source.addFeatures(feats);
-    };
-    /**
-     * trigger load features
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBaseVectorEsri.prototype._load = function () {
-        var _this = this;
-        if (_super.prototype._load.call(this)) {
-            return true;
-        }
-        $.get(this._url, this.params, function (d) {
-            _this.addFeatures(d);
-            _this.loadCallback(_this);
-        }, 'json').fail(function () {
-            _this._loaded = false;
-        });
-        return false;
-    };
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    LayerBaseVectorEsri.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
-        this.mapMoveParams['geometry'] = extent.minX + "," + extent.minY + "," + extent.maxX + "," + extent.maxY;
-        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';
-        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-        this.mapMoveParams['inSR'] = 3857;
-        if (this._outSR == 3857) {
-            this.mapMoveParams['geometryPrecision'] = 1;
-        }
-    };
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    LayerBaseVectorEsri.prototype.mapMoveBefore = function (zoom, evtType) {
-        return _super.prototype.mapMoveBefore.call(this, zoom, evtType);
-        //if (super.mapMoveBefore(zoom, evtType)){
-        //    //place holder for additional processing
-        //    return true;
-        //} else {
-        //    return false;
-        //}
-    };
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    LayerBaseVectorEsri.prototype.mapMoveCallback = function (d) {
-        _super.prototype.mapMoveCallback.call(this, d);
-        this.source.addFeatures(this._esriFormat.readFeatures(d));
-    };
-    return LayerBaseVectorEsri;
-}(LayerBaseVector_1.LayerBaseVector));
-exports.LayerBaseVectorEsri = LayerBaseVectorEsri;
-nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
-exports.default = LayerBaseVectorEsri;
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/4/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseXyzTile_1 = __webpack_require__(28);
-var RealEarthAnimateTile_1 = __webpack_require__(31);
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('layers');
-/**
- * Real earth tile
- * @augments LayerBaseXyzTile
- */
-var LayerRealEarthTile = (function (_super) {
-    __extends(LayerRealEarthTile, _super);
-    /**
-     * The base layer for all others
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {string} options.products - the products to request
-     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-    function LayerRealEarthTile(options) {
-        var _this = this;
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (options.animate) {
-            _this = _super.call(this, '', options) || this;
-            _this._products = options.products;
-            _this.animator = new RealEarthAnimateTile_1.default(_this, options.timeLoadCallback);
-            _this.animator.timeInit();
-        }
-        else {
-            _this = _super.call(this, "http://realearth.ssec.wisc.edu/api/image?products=" + options.products + "&x={x}&y={y}&z={z}", options) || this;
-            _this._products = options.products;
-        }
-        return _this;
-    }
-    LayerRealEarthTile.prototype.setLayerTime = function (theTime) {
-        if (this.animator) {
-            return this.animator.setLayerTime(theTime);
-        }
-        else {
-            return false;
-        }
-    };
-    LayerRealEarthTile.prototype._load = function () {
-        if (this.animator) {
-            return false;
-        }
-        return _super.prototype._load.call(this);
-    };
-    return LayerRealEarthTile;
-}(LayerBaseXyzTile_1.LayerBaseXyzTile));
-exports.LayerRealEarthTile = LayerRealEarthTile;
-nm.LayerRealEarthTile = LayerRealEarthTile;
-exports.default = LayerRealEarthTile;
-
-
-/***/ }),
-/* 26 */,
-/* 27 */,
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/4/2015.
- */
-var LayerBase_1 = __webpack_require__(8);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var nm = provide_1.default('layers');
-/**
- * XYZ tile
- * @augments LayerBase
- */
-var LayerBaseXyzTile = (function (_super) {
-    __extends(LayerBaseXyzTile, _super);
-    /**
-     * The XYZ tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-    function LayerBaseXyzTile(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new ol.source.XYZ({ url: _this.url == '' ? undefined : _this.url });
-        _this._olLayer = new ol.layer.Tile({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
-        });
-        _this._olLayer.setZIndex(_this._zIndex);
-        return _this;
-    }
-    Object.defineProperty(LayerBaseXyzTile.prototype, "source", {
-        /**
-         *
-         * @returns {ol.source.XYZ} the vector source
-         */
-        get: function () {
-            return this._source;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseXyzTile.prototype, "olLayer", {
-        /**
-         *
-         * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-         */
-        get: function () {
-            return this._olLayer;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerBaseXyzTile;
-}(LayerBase_1.LayerBase));
-exports.LayerBaseXyzTile = LayerBaseXyzTile;
-nm.LayerBaseXyzTile = LayerBaseXyzTile;
-exports.default = LayerBaseXyzTile;
-
-
-/***/ }),
-/* 29 */,
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/4/2015.
- */
-var provide_1 = __webpack_require__(0);
-var mapPopup_1 = __webpack_require__(4);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('mixin');
-/**
- * The GMT offset time in minutes
- * @type {number}
- */
-var offsetMinutes = (new Date()).getTimezoneOffset();
-/**
- * Mixin to get the product times
- * Be sure to call getTimeInit after the mixin has been applied
- */
-var RealEarthAnimate = (function () {
-    function RealEarthAnimate(lyr, loadCallback) {
-        this.lyr = lyr;
-        this._products = lyr._products;
-        if (loadCallback) {
-            this.loadCallback = loadCallback;
-        }
-        else {
-            this.loadCallback = function () { return; };
-        }
-    }
-    /**
-     * Call this after the mixin has been applied
-     */
-    RealEarthAnimate.prototype.timeInit = function () {
-        var _this = this;
-        this._rawDateStrings = [];
-        this._localDates = [];
-        this.localTimes = [];
-        this._animateEnabled = true;
-        // this._loaded = true;
-        this._currentTime = undefined;
-        this._currentIndex = undefined;
-        $.get('http://realearth.ssec.wisc.edu/api/products', { products: this._products }, function (d) {
-            if (d.length == 0) {
-                console.log(_this._products + " layer not available or does not have times");
-                return;
-            }
-            d = d[0];
-            for (var i = 0; i < d['times'].length; i++) {
-                _this._loadDates.call(_this, d['times'][i]);
-            }
-            _this.loadCallback.call(_this.lyr, _this.lyr);
-            _this._loadLatest.call(_this);
-        }, 'json');
-    };
-    /**
-     * Given the raw time string, add to the arrays to keep track of dates and cache
-     * @param {string} inString - input string to parse
-     * @returns {string} the converted string
-     * @protected
-     */
-    RealEarthAnimate.prototype._loadDates = function (inString) {
-        var yr = inString.slice(0, 4);
-        var month = inString.slice(4, 6);
-        var d = inString.slice(6, 8);
-        var hr = inString.slice(9, 11);
-        var mn = inString.slice(11, 13);
-        var sec = inString.slice(13, 15);
-        var rawDateStr = inString.replace('.', '_');
-        this._rawDateStrings.push(rawDateStr);
-        var dteStr = month + "/" + d + "/" + yr + " " + hr + ":" + mn + ":" + sec;
-        var newDte = new Date(dteStr);
-        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
-        this._localDates.push(newDte);
-        this.localTimes.push(newDte.getTime());
-        return rawDateStr;
-    };
-    /**
-     *
-     * @protected
-     * @returns {boolean} if should continue
-     */
-    RealEarthAnimate.prototype._loadLatest = function () {
-        mapPopup_1.default.closePopup();
-        if (this.localTimes.length > 0) {
-            this._currentIndex = this.localTimes.length - 1;
-            return true;
-        }
-        else {
-            return false;
-        }
-    };
-    /**
-     *
-     * @param {number} theTime - the time
-     * @returns {boolean} true if new index, false if the same or below lowest value
-     */
-    RealEarthAnimate.prototype.setLayerTime = function (theTime) {
-        this._currentTime = theTime;
-        var newIndex;
-        if (theTime < this.localTimes[0]) {
-            return false;
-        }
-        else if (theTime > this.localTimes[this.localTimes.length - 1]) {
-            newIndex = this.localTimes.length - 1;
-        }
-        for (var i = 0; i < this.localTimes.length; i++) {
-            if (this.localTimes[i] >= theTime) {
-                newIndex = i;
-                break;
-            }
-        }
-        if (newIndex == this._currentIndex) {
-            return false;
-        }
-        else {
-            this._currentIndex = newIndex;
-            mapPopup_1.default.closePopup();
-            return true;
-        }
-    };
-    return RealEarthAnimate;
-}());
-exports.RealEarthAnimate = RealEarthAnimate;
-nm.RealEarthAnimate = RealEarthAnimate;
-exports.default = RealEarthAnimate;
-
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/4/2015.
- */
-var RealEarthAnimate_1 = __webpack_require__(30);
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('mixin');
-/**
- * Animate real earth tile
- * @augments RealEarthAnimate
- */
-var RealEarthAnimateTile = (function (_super) {
-    __extends(RealEarthAnimateTile, _super);
-    function RealEarthAnimateTile(layer, loadCallback) {
-        var _this = _super.call(this, layer, loadCallback) || this;
-        _this._source = layer.source;
-        _this._olLayer = layer.olLayer;
-        return _this;
-    }
-    RealEarthAnimateTile.prototype.timeInit = function () {
-        _super.prototype.timeInit.call(this);
-        this._sourceUrls = [];
-    };
-    RealEarthAnimateTile.prototype._loadDates = function (inString) {
-        var rawDte = _super.prototype._loadDates.call(this, inString);
-        var dteProductUrl = "http://realearth.ssec.wisc.edu/api/image?products=" + this._products + "_" + rawDte + "&x={x}&y={y}&z={z}";
-        this._sourceUrls.push(dteProductUrl);
-        return '';
-    };
-    /**
-     * @protected
-     */
-    RealEarthAnimateTile.prototype._loadLatest = function () {
-        if (_super.prototype._loadLatest.call(this)) {
-            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
-        }
-        return true;
-    };
-    RealEarthAnimateTile.prototype.setLayerTime = function (theTime) {
-        if (_super.prototype.setLayerTime.call(this, theTime)) {
-            if (this._olLayer.getZIndex() < 0) {
-                this._olLayer.setZIndex(0);
-            }
-            this._source.setUrl(this._sourceUrls[this._currentIndex]);
-        }
-        else {
-            this._olLayer.setZIndex(-1);
-        }
-        return true;
-    };
-    return RealEarthAnimateTile;
-}(RealEarthAnimate_1.default));
-nm.RealEarthAnimateTile = RealEarthAnimateTile;
-exports.default = RealEarthAnimateTile;
-
-
-/***/ }),
-/* 32 */,
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var quickMap_1 = __webpack_require__(7);
-var LayerRealEarthTile_1 = __webpack_require__(25);
-var media_control_1 = __webpack_require__(17);
-var $ = __webpack_require__(1);
-var LayerBaseVectorEsri_1 = __webpack_require__(24);
-var LayerEsriMapServer_1 = __webpack_require__(10);
-var nexrhresStatic = new LayerRealEarthTile_1.default({
-    products: 'nexrhres',
-    id: 'nexrhres-static',
-    opacity: 0.6,
-    animate: true,
-    name: 'Hybrid Reflectivity',
-    // maxZoom: 10,
-    timeLoadCallback: function (f) {
-        console.log(f);
-    }
-});
-var d = new Date();
-var endTime = d.getTime();
-d.setHours(d.getHours() - 4);
-var startTime = d.getTime();
-var rangeStep = Math.round((endTime - startTime) / 8);
-var media = new media_control_1.MediaControl($('#control'), function (v) {
-    nexrhresStatic.setLayerTime(v);
-}, {
-    min: startTime,
-    max: endTime,
-    val: endTime,
-    step: rangeStep,
-    playInterval: 750,
-    showAsDate: true
-});
-var map = quickMap_1.quickMap();
-map.addLayer(nexrhresStatic.olLayer);
-var coordinationLayer = new LayerBaseVectorEsri_1.LayerBaseVectorEsri('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0', {
-    visible: true,
-    autoLoad: true,
-    name: 'Coordination',
-    useEsriStyle: true
-});
-map.addLayer(coordinationLayer.olLayer);
-var oakRidgeLayers = [
-    ['Cameras', 'cameras33'],
-    ['HAR', 'HAR33'],
-    ['DMS', 'MessageSigns33'],
-    //['State Summary', 'statesummary'],
-    ['Traffic Control', 'TrafficControl33'],
-    ['Traffic Detection', 'TrafficDetectionMulti'],
-    ['Weather', 'Weather33']
-];
-for (var i = 0; i < oakRidgeLayers.length; i++) {
-    var oakRidgeLayer = new LayerEsriMapServer_1.LayerEsriMapServer("http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/" + oakRidgeLayers[i][1] + "/MapServer", {
-        id: oakRidgeLayers[i][1],
-        name: oakRidgeLayers[i][0],
-        visible: true,
-        minZoom: 7,
-        zIndex: 20,
-        addPopup: true,
-        legendCollapse: true
-    });
-    map.addLayer(oakRidgeLayer.olLayer);
-}
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\animate.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
 /******/ ]);
diff --git a/test/serve/js/animate.js.map b/test/serve/js/animate.js.map
index 6f2acda57a9f32dcc4ecca563bf1c2ccabae8d53..05e04cf322b27d94c5d51e6576b38d0e51443f8f 100644
--- a/test/serve/js/animate.js.map
+++ b/test/serve/js/animate.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb","webpack:///./src/util/provide.ts","webpack:///external \"$\"","webpack:///external \"ol\"","webpack:///./src/util/makeGuid.ts","webpack:///./src/olHelpers/mapPopup.ts","webpack:///./src/olHelpers/mapInteractionBase.ts","webpack:///./src/olHelpers/mapMove.ts","webpack:///./src/olHelpers/quickMap.ts","webpack:///./src/layers/LayerBase.ts","webpack:///./src/util/checkDefined.ts","webpack:///./src/layers/LayerEsriMapServer.ts","webpack:///./src/olHelpers/mapMoveCls.ts","webpack:///./src/olHelpers/mapPopupCls.ts","webpack:///./src/olHelpers/quickMapBase.ts","webpack:///./src/olHelpers/zoomResolutionConvert.ts","webpack:///./src/olHelpers/esriToOlStyle.ts","webpack:///./src/domUtil/media-control.ts","webpack:///./src/domUtil/range-change.ts","webpack:///./src/layers/LayerBaseVector.ts","webpack:///./src/layers/LayerBaseVectorEsri.ts","webpack:///./src/layers/LayerRealEarthTile.ts","webpack:///./src/layers/LayerBaseXyzTile.ts","webpack:///./src/mixin/RealEarthAnimate.ts","webpack:///./src/mixin/RealEarthAnimateTile.ts","webpack:///./test/demo/animate.ts"],"names":[],"mappings":"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","file":"animate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 33);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","module.exports = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 2\n// module chunks = 0 1 2 3","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/makeGuid.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopup.ts","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapInteractionBase.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMove.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nimport ol = require('custom-ol');\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): ol.Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMap.ts","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport makeGuid from '../util/makeGuid';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: ol.source.Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: ol.layer.Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBase.ts","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/checkDefined.ts","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.Tile,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerEsriMapServer.ts","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = functionId;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMoveCls.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: ol.Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: ol.Coordinate;\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: Object;\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupLayerNames: Array<string>;\r\n    private _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return ol.easing.inAndOut(n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector, selectionStyle: {color?: string, width?: number, olStyle?: ol.style.Style}): ol.layer.Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: ol.style.Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopupCls.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): ol.Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    const controls = ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }\r\n    );\r\n\r\n    const view = new ol.View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer],\r\n        target: options.divId,\r\n        controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMapBase.ts","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/zoomResolutionConvert.ts","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface EsriResponse{\r\n    drawingInfo: {\r\n        renderer: EsriRenderer\r\n    },\r\n    geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n    type: string;\r\n    symbol: EsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: string;\r\n        width: number;\r\n    },\r\n    color: string;\r\n    width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: EsriSymbol;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    opacity: number;\r\n    renderer: EsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    constructor(esriResponse: EsriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse.drawingInfo.renderer;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    symbol: EsriSymbol;\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer.symbol;\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n    propertyName: string;\r\n    defaultSymbol: EsriSymbol;\r\n    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: Object;\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse: EsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n\r\n        this.olStyle = (feature: ol.Feature) => {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[this.propertyName];\r\n\r\n            let returnValue;\r\n            if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = null;\r\n\r\n    switch (renderer.type) {\r\n        case 'simple':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse.geometryType + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/esriToOlStyle.ts","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('domUtil');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm) {\r\n    \"use strict\";\r\n    let d = new Date(tm);\r\n    let p1 = d.toLocaleTimeString().split(' ');\r\n    let p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\nexport interface changeFunction{\r\n    (newVal?: number): void;\r\n}\r\n\r\nexport interface mediaRangeConfig{\r\n    min?: number;\r\n    max?: number;\r\n    val?: number;\r\n    step?: number;\r\n    playInterval?: number;\r\n    showAsDate?: boolean;\r\n}\r\n\r\n\r\n\r\nexport class MediaControl {\r\n    _container: JQuery;\r\n    _min: number;\r\n    _max: number;\r\n    _playInterval: number;\r\n    _step: number;\r\n    _currentValue: number;\r\n\r\n    _playing: boolean;\r\n\r\n    _$btnStop: JQuery;\r\n    _$slider: JQuery;\r\n    _$valLabelVal: JQuery;\r\n    _$valLabelMin: JQuery;\r\n    _$valLabelMax: JQuery;\r\n    _interval: number;\r\n    _showAsDate: boolean;\r\n\r\n    _changeFunc: changeFunction;\r\n\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    constructor(\r\n        element: JQuery|HTMLElement|string,\r\n        changeFunc: changeFunction = (): void => {return;},\r\n        mediaConfig: mediaRangeConfig = {}) {\r\n\r\n        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;\r\n        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;\r\n        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;\r\n        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;\r\n        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;\r\n        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;\r\n\r\n        if (typeof  element == 'string'){\r\n            this._container = $('#' + element);\r\n        }\r\n        else if (typeof element['style'] !== 'undefined'){\r\n            this._container = $(element);\r\n        } else {\r\n            this._container = element as JQuery;\r\n        }\r\n\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n\r\n        this._showAsDate = mediaConfig.showAsDate;\r\n\r\n        this._currentValue = undefined;\r\n        this._min = undefined;\r\n        this._max = undefined;\r\n        this._step = undefined;\r\n        this._playing = false;\r\n\r\n        let htmlStr =\r\n            '<span class=\"media-player-button media-back\"></span>' +\r\n            '<span class=\"media-player-button media-play\"></span>' +\r\n            '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n            '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n            '<span class=\"media-player-button media-ahead\"></span>' +\r\n            `<input type=\"range\">` +\r\n            `<div class=\"media-control-value-label-container\">` +\r\n            `<span class=\"media-control-value-label-min\"></span>` +\r\n            `<span class=\"media-control-value-label-val\"></span>` +\r\n            `<span class=\"media-control-value-label-max\"></span>` +\r\n            `</div>`;\r\n\r\n        this._container.append(htmlStr);\r\n\r\n        // let btnPause = this._container.find('.media-pause');\r\n        let btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        let btnAhead = this._container.find('.media-ahead');\r\n        let btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\r\n\r\n        this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n        this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n        this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n\r\n        rangeChange(this._$slider,(newVal) => { this.currentValue = newVal;}, 100);\r\n\r\n        let ___this = this;\r\n\r\n        btnPlay.click(function () {\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            ___this._$btnStop.removeClass('media-disabled');\r\n            btnAhead.addClass('media-locked');\r\n            btnBack.addClass('media-locked');\r\n            ___this._$slider.prop('disabled', true);\r\n            ___this._playing = true;\r\n\r\n            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            btnPlay.removeClass('media-disabled');\r\n            btnAhead.removeClass('media-locked');\r\n            btnBack.removeClass('media-locked');\r\n            ___this._$slider.prop('disabled', false);\r\n            ___this._playing = false;\r\n        });\r\n\r\n        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n\r\n    stopPlaying(){\r\n        if (this._playing){\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    }\r\n\r\n    get playing(){\r\n        return this._playing;\r\n    }\r\n\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    get step() {\r\n        return this._step;\r\n    }\r\n\r\n    get currentValue() {\r\n        return this._currentValue;\r\n    }\r\n\r\n    set currentValue(newValue) {\r\n        if (newValue > this._max) {\r\n            newValue = this._min;\r\n        } else if (newValue < this._min) {\r\n            newValue = this._max;\r\n        }\r\n        this._currentValue = newValue;\r\n        this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n        } else {\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n        }\r\n\r\n        this._changeFunc(newValue);\r\n    }\r\n\r\n    /**\r\n     * set min and max value with step\r\n     * @param {number} newMin the new min\r\n     * @param {number} newMax the new mas\r\n     * @param {number} [newValue=newMin] the value to set\r\n     * @param {number} [newStep=(newMax-newMin)/20] step value\r\n     */\r\n    setMinMaxValueStep(newMin, newMax, newValue, newStep) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;\r\n\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\r\n\r\n        this._$slider.prop('min', this.min.toString());\r\n        this._$slider.prop('max', this.max.toString());\r\n        this._$slider.prop('step', this.step.toString());\r\n        this._$slider.val(this.currentValue.toString());\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n        } else {\r\n            this._$valLabelMin.html(this._min.toString());\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n            this._$valLabelMax.html(this._max.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {mediaCallback} newFunc the callback on change\r\n     */\r\n    set changeFunction(newFunc: changeFunction) {\r\n        this._changeFunc = newFunc;\r\n    }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/media-control.ts","import provide from '../util/provide';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('domUtil');\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout = null;\r\nlet dragged = false;\r\nlet lastVal;\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n    /**\r\n     *\r\n     * @param newValue new value of the slider\r\n     * @param ratio ratio from low to high, 0 to 1\r\n     * @param evt the original event\r\n     */\r\n    (newValue: number, ratio: number, evt: Event): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt) {\r\n    \"use strict\";\r\n\r\n    let val = parseFloat(this.value);\r\n    let min = parseFloat(this.min);\r\n    let max = parseFloat(this.max);\r\n    let step = parseFloat(this.step);\r\n\r\n    if (max - val < step){\r\n        val = max;\r\n    }\r\n\r\n    let percent =  (val - min) / (max - min);\r\n\r\n    if (typeof lastVal == 'number' && val ==  lastVal){\r\n        return;\r\n    }\r\n    lastVal = val;\r\n    callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param  $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousemove(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         * @this {HTMLElement}\r\n         */\r\n        function (evt) {\r\n        if (!(mouseIn && mouseDown)) {\r\n            return;\r\n        }\r\n\r\n        dragged = true;\r\n\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n\r\n        }, changeTimeout);\r\n    });\r\n\r\n    $slider.keyup(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         */\r\n        function (evt) {\r\n        if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n            triggerCallback.call(this, callback, evt);\r\n        }\r\n    });\r\n\r\n    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n\r\n    return this;\r\n}\r\n\r\nnm.rangeChange = rangeChange;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/range-change.ts","import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n    /**\r\n     *\r\n     * @param lyr\r\n     * @param extent\r\n     * @param zoomLevel\r\n     */\r\n    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n    autoLoad?: boolean;\r\n    style?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    onDemand?: boolean;\r\n    onDemandDelay?: number;\r\n    mapMoveMakeGetParams?: makeMapMoveParams;\r\n    mapMoveObj?: MapMoveCls;\r\n    renderOrder?: (a: ol.Feature, b: ol.Feature) => number;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n    _olLayer: ol.layer.Vector;\r\n    _source: ol.source.Vector;\r\n    _style: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    _autoLoad: boolean;\r\n    _onDemand: boolean;\r\n    _onDemandDelay: number;\r\n    _mapMoveMakeGetParams: makeMapMoveParams;\r\n    _mapMoveParams: any;\r\n    _mapMove: MapMoveCls;\r\n    _projectionMap: ol.proj.Projection;\r\n    _projection4326: ol.proj.Projection;\r\n\r\n\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorOptions = {}) {\r\n        super(url, options);\r\n\r\n        options = options as LayerBaseVectorOptions;\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj) {\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () {return {};};\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new ol.source.Vector();\r\n\r\n\r\n        this._olLayer = new ol.layer.Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                renderOrder: options.renderOrder\r\n            }\r\n        );\r\n\r\n        this.olLayer.setZIndex(this._zIndex);\r\n\r\n\r\n        this._projectionMap = null;\r\n        this._projection4326 = new ol.proj.Projection({code: \"EPSG:4326\"});\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     */\r\n    get onDemandDelay(): number {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     */\r\n    get autoLoad(): boolean {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     */\r\n    get style(): ol.StyleFunction|Array<ol.style.Style>|ol.style.Style {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param style - the style or function\r\n     */\r\n    set style(style: ol.StyleFunction|Array<ol.style.Style>|ol.style.Style) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style as ol.style.Style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     */\r\n    get mapCrs(): string {\r\n        return this.mapProj == null ? null : this.mapProj.getCode();\r\n    }\r\n\r\n    get mapProj(): ol.proj.Projection{\r\n        if (this._projectionMap != null){\r\n            return this._projectionMap;\r\n        }\r\n\r\n        if (this._mapMove) {\r\n            this._projectionMap = this._mapMove.map.getView().getProjection();\r\n            return this._projectionMap;\r\n        } else {\r\n            return null;\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove(): MapMoveCls {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n    get visible(): boolean{\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.setVisible(visibility);\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     */\r\n    get source(): ol.source.Vector {\r\n        return this.getSource() as ol.source.Vector;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     */\r\n    get features(): Array<ol.Feature> {\r\n        return this.source.getFeatures();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    get olLayer(): ol.layer.Vector {\r\n        return super.getOlLayer() as ol.layer.Vector;\r\n    }\r\n\r\n    protected setZIndex(newZ: number) {\r\n        this.olLayer.setZIndex(newZ);\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBaseVector.ts","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nlet nm = provide('layers');\r\n\r\nexport interface LayerBaseVectorEsriOptions  extends LayerBaseVectorOptions{\r\n    format?: string;\r\n    outSR?: number;\r\n    where?: string;\r\n    outFields?: string;\r\n    useEsriStyle?: boolean;\r\n}\r\n\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorEsri extends LayerBaseVector {\r\n    _outSR: number;\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _urlCopy: string;\r\n    _useEsriStyle: boolean;\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} [options.where=1=1] the layer filter clause\r\n     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all\r\n     * @param {string} [options.format=pjson] the format the retrieve the data\r\n     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed\r\n     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorEsriOptions) {\r\n\r\n        if (typeof options.params != 'object') {\r\n            options.params = {};\r\n        }\r\n        options.params['where'] = options.where || '1=1';\r\n        options.params['outFields'] = options.outFields || '*';\r\n        options.params['f'] = options.format || 'pjson';\r\n        options.params['outSR'] = options.outSR || 3857;\r\n\r\n        super(url, options);\r\n        this._outSR = this.params['outSR'];\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n\r\n        if (this._url[this._url.length - 1] !== '/') {\r\n            this._url += '/';\r\n        }\r\n\r\n        this._urlCopy = this.url;\r\n        this._url += 'query?callback=?';\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content to add to legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n\r\n                    return;\r\n                }\r\n\r\n                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                this.style = newStyleAndLegend.style;\r\n                super.addLegendContent(newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    addFeatures(featureCollection) {\r\n        let feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, (d) => {\r\n            this.addFeatures(d);\r\n            this.loadCallback(this);\r\n        }, 'json').fail(() => {\r\n                this._loaded = false;\r\n            });\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;\r\n        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['inSR'] = 3857;\r\n        if (this._outSR == 3857) {\r\n            this.mapMoveParams['geometryPrecision'] = 1;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        return super.mapMoveBefore(zoom, evtType);\r\n        //if (super.mapMoveBefore(zoom, evtType)){\r\n        //    //place holder for additional processing\r\n        //    return true;\r\n        //} else {\r\n        //    return false;\r\n        //}\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexport default LayerBaseVectorEsri;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBaseVectorEsri.ts","/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nimport {LayerBaseXyzTile} from './LayerBaseXyzTile';\r\nimport {LayerBaseOptions} from './LayerBase';\r\nimport RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';\r\nimport provide from '../util/provide';\r\nimport {IRealEarthAnimate, timesLoadedCallback} from \"../mixin/RealEarthAnimate\";\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerRealEarthTileOptions extends LayerBaseOptions {\r\n    products: string;\r\n    animate?: boolean;\r\n    timeLoadCallback?: timesLoadedCallback;\r\n}\r\n\r\n\r\n/**\r\n * Real earth tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nexport class LayerRealEarthTile extends LayerBaseXyzTile implements IRealEarthAnimate {\r\n    _products: string;\r\n    animator: RealEarthAnimateTile;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {string} options.products - the products to request\r\n     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates\r\n     * @param {boolean} [options.animate=false] if the layer should be animated\r\n     */\r\n    constructor(options: LayerRealEarthTileOptions) {\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            super('', options);\r\n            this._products = options.products;\r\n            this.animator = new RealEarthAnimateTile(this, options.timeLoadCallback);\r\n            this.animator.timeInit();\r\n        } else {\r\n            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);\r\n            this._products = options.products;\r\n        }\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _load(): boolean {\r\n        if (this.animator) {\r\n            return false;\r\n        }\r\n        return super._load();\r\n    }\r\n}\r\n\r\nnm.LayerRealEarthTile = LayerRealEarthTile;\r\nexport default LayerRealEarthTile;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerRealEarthTile.ts","/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('layers');\r\n\r\n\r\n/**\r\n * XYZ tile\r\n * @augments LayerBase\r\n */\r\nexport class LayerBaseXyzTile extends LayerBase {\r\n\r\n\r\n    /**\r\n     * The XYZ tile layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        super(url, options);\r\n        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.XYZ,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        } );\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.XYZ} the vector source\r\n     */\r\n    get source(): ol.source.XYZ {\r\n        return this._source as ol.source.XYZ;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer\r\n     */\r\n    get olLayer() : ol.layer.Tile {\r\n        return this._olLayer as ol.layer.Tile;\r\n    }\r\n}\r\n\r\nnm.LayerBaseXyzTile = LayerBaseXyzTile;\r\nexport default LayerBaseXyzTile;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBaseXyzTile.ts","/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {LayerVectorRealEarth} from '../layers/LayerRealEarthVector'\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('mixin');\r\n\r\n\r\n/**\r\n * The GMT offset time in minutes\r\n * @type {number}\r\n */\r\nlet offsetMinutes = (new Date()).getTimezoneOffset();\r\n\r\nexport interface IRealEarthAnimate{\r\n    setLayerTime(theTime: number): boolean;\r\n}\r\n\r\nexport interface timesLoadedCallback{\r\n    (lyr?: LayerRealEarthTile|LayerVectorRealEarth): void;\r\n}\r\n\r\n\r\n/**\r\n * Mixin to get the product times\r\n * Be sure to call getTimeInit after the mixin has been applied\r\n */\r\nexport class RealEarthAnimate {\r\n    _animateEnabled: boolean;\r\n    _currentIndex: number;\r\n    _localDates: Date[];\r\n    _rawDateStrings: string[];\r\n    _products: string;\r\n    loadCallback: timesLoadedCallback;\r\n    localTimes: number[];\r\n    _currentTime: number;\r\n\r\n    lyr: LayerRealEarthTile|LayerVectorRealEarth;\r\n\r\n    constructor(lyr: LayerRealEarthTile|LayerVectorRealEarth, loadCallback?: timesLoadedCallback){\r\n        this.lyr = lyr;\r\n        this._products = lyr._products;\r\n        if (loadCallback){\r\n            this.loadCallback = loadCallback;\r\n        } else {\r\n            this.loadCallback = function(): void {return;};\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    timeInit() {\r\n\r\n        this._rawDateStrings = [];\r\n        this._localDates = [];\r\n        this.localTimes = [];\r\n        this._animateEnabled = true;\r\n        // this._loaded = true;\r\n        this._currentTime = undefined;\r\n        this._currentIndex = undefined;\r\n\r\n        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, (d) => {\r\n            if (d.length == 0) {\r\n                console.log(`${this._products} layer not available or does not have times`);\r\n\r\n                return;\r\n            }\r\n            d = d[0];\r\n            for (let i = 0; i < d['times'].length; i++) {\r\n                this._loadDates.call(this, d['times'][i]);\r\n            }\r\n            this.loadCallback.call(this.lyr, this.lyr);\r\n            this._loadLatest.call(this);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    /**\r\n     * Given the raw time string, add to the arrays to keep track of dates and cache\r\n     * @param {string} inString - input string to parse\r\n     * @returns {string} the converted string\r\n     * @protected\r\n     */\r\n    _loadDates(inString: string): string {\r\n        let yr = inString.slice(0, 4);\r\n        let month = inString.slice(4, 6);\r\n        let d = inString.slice(6, 8);\r\n        let hr = inString.slice(9, 11);\r\n        let mn = inString.slice(11, 13);\r\n        let sec = inString.slice(13, 15);\r\n\r\n        let rawDateStr = inString.replace('.', '_');\r\n        this._rawDateStrings.push(rawDateStr);\r\n\r\n        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;\r\n        let newDte = new Date(dteStr);\r\n        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);\r\n        this._localDates.push(newDte);\r\n        this.localTimes.push(newDte.getTime());\r\n\r\n        return rawDateStr;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @protected\r\n     * @returns {boolean} if should continue\r\n     */\r\n    _loadLatest(){\r\n        mapPopup.closePopup();\r\n        if (this.localTimes.length > 0){\r\n            this._currentIndex = this.localTimes.length -1;\r\n\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} theTime - the time\r\n     * @returns {boolean} true if new index, false if the same or below lowest value\r\n     */\r\n    setLayerTime(theTime: number): boolean{\r\n\r\n        this._currentTime = theTime;\r\n\r\n        let newIndex;\r\n\r\n        if (theTime < this.localTimes[0]){\r\n            return false;\r\n        } else if (theTime > this.localTimes[this.localTimes.length - 1]){\r\n            newIndex = this.localTimes.length - 1;\r\n        }\r\n\r\n        for (let i = 0; i < this.localTimes.length; i++){\r\n            if (this.localTimes[i] >= theTime){\r\n                newIndex = i;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (newIndex == this._currentIndex){\r\n            return false;\r\n        } else {\r\n            this._currentIndex = newIndex;\r\n            mapPopup.closePopup();\r\n\r\n            return true;\r\n        }\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimate = RealEarthAnimate;\r\nexport default RealEarthAnimate;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixin/RealEarthAnimate.ts","/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport RealEarthAnimate from './RealEarthAnimate';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nconst nm = provide('mixin');\r\n\r\n/**\r\n * Animate real earth tile\r\n * @augments RealEarthAnimate\r\n */\r\nclass RealEarthAnimateTile extends RealEarthAnimate {\r\n    _sourceUrls: string[];\r\n    _source: ol.source.XYZ;\r\n    _olLayer: ol.layer.Tile;\r\n\r\n    constructor(layer: LayerRealEarthTile, loadCallback?: (lyr: LayerRealEarthTile) => void){\r\n        super(layer, loadCallback);\r\n        this._source = layer.source;\r\n        this._olLayer = layer.olLayer;\r\n    }\r\n\r\n\r\n\r\n    timeInit() {\r\n        super.timeInit();\r\n        this._sourceUrls = [];\r\n    }\r\n\r\n    _loadDates(inString: string): string {\r\n        let rawDte = super._loadDates(inString);\r\n        let dteProductUrl =\r\n            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;\r\n        this._sourceUrls.push(dteProductUrl);\r\n        return '';\r\n    }\r\n\r\n    /**\r\n     * @protected\r\n     */\r\n    _loadLatest(): boolean {\r\n        if (super._loadLatest()){\r\n            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (super.setLayerTime(theTime)) {\r\n            if (this._olLayer.getZIndex() < 0){\r\n                this._olLayer.setZIndex(0);\r\n            }\r\n            this._source.setUrl(this._sourceUrls[this._currentIndex]);\r\n        } else {\r\n            this._olLayer.setZIndex(-1);\r\n        }\r\n        return true;\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimateTile = RealEarthAnimateTile;\r\nexport default RealEarthAnimateTile;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixin/RealEarthAnimateTile.ts","import {quickMap} from '../../src/olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../../src/layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../../src/domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../../src/layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../../src/layers/LayerEsriMapServer\";\r\n\r\nlet nexrhresStatic = new LayerRealEarthTile({\r\n        products: 'nexrhres',\r\n        id: 'nexrhres-static',\r\n        opacity: 0.6,\r\n        animate: true,\r\n        name: 'Hybrid Reflectivity',\r\n        // maxZoom: 10,\r\n        timeLoadCallback: function (f) {\r\n            console.log(f);\r\n        }\r\n    }\r\n);\r\n\r\n\r\nlet d = new Date();\r\nlet endTime = d.getTime();\r\nd.setHours(d.getHours() - 4);\r\nlet startTime = d.getTime();\r\nlet rangeStep = Math.round((endTime - startTime) / 8);\r\n\r\nlet media = new MediaControl(\r\n    $('#control'),\r\n    (v: number) => {\r\n        nexrhresStatic.setLayerTime(v);\r\n    },\r\n    {\r\n        min: startTime,\r\n        max: endTime,\r\n        val: endTime,\r\n        step: rangeStep,\r\n        playInterval: 750,\r\n        showAsDate: true\r\n    }\r\n);\r\n\r\n\r\nlet map = quickMap();\r\nmap.addLayer(nexrhresStatic.olLayer);\r\n\r\n\r\nlet coordinationLayer = new LayerBaseVectorEsri(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0',\r\n    {\r\n        visible: true,\r\n        autoLoad: true,\r\n        name: 'Coordination',\r\n        useEsriStyle: true\r\n    }\r\n);\r\n\r\nmap.addLayer(coordinationLayer.olLayer);\r\n\r\n    let oakRidgeLayers = [\r\n        ['Cameras', 'cameras33'],\r\n        ['HAR', 'HAR33'],\r\n        ['DMS', 'MessageSigns33'],\r\n        //['State Summary', 'statesummary'],\r\n        ['Traffic Control', 'TrafficControl33'],\r\n        ['Traffic Detection', 'TrafficDetectionMulti'],\r\n        ['Weather', 'Weather33']\r\n    ];\r\n\r\n\r\n    for (let i = 0; i < oakRidgeLayers.length; i++) {\r\n        let oakRidgeLayer = new LayerEsriMapServer(\r\n            `http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/${oakRidgeLayers[i][1]}/MapServer`,\r\n            {\r\n                id: oakRidgeLayers[i][1],\r\n                name: oakRidgeLayers[i][0],\r\n                visible: true,\r\n                minZoom: 7,\r\n                zIndex: 20,\r\n                addPopup: true,\r\n                legendCollapse: true\r\n            }\r\n        );\r\n        map.addLayer(oakRidgeLayer.olLayer);\r\n    }\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/animate.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8*******"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"animate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/another.js b/test/serve/js/another.js
index 61d0660daf89d8bfb7bfea9b26912a0326b8fd89..9a8f6d9b9be1d706cd424ef5e707ef47adb05834 100644
--- a/test/serve/js/another.js
+++ b/test/serve/js/another.js
@@ -63,22 +63,16 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 34);
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
 /******/ })
 /************************************************************************/
-/******/ ({
-
-/***/ 34:
+/******/ ([
+/* 0 */,
+/* 1 */
 /***/ (function(module, exports) {
 
-/**
- * Created by gavorhes on 9/22/2016.
- */
-console.log('here is another');
-console.log('here is another');
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\another.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
-
-/******/ });
+/******/ ]);
 //# sourceMappingURL=another.js.map
\ No newline at end of file
diff --git a/test/serve/js/another.js.map b/test/serve/js/another.js.map
index ffe89e25a2cb641e0a4c9ced4699a2f6603285d3..a9b85b1169955a49a77274d0059c579b5e26db67 100644
--- a/test/serve/js/another.js.map
+++ b/test/serve/js/another.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83*******","webpack:///./test/demo/another.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;AChEA;;GAEG;AAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC","file":"another.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 34);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\nconsole.log('here is another');\r\nconsole.log('here is another');\n\n\n// WEBPACK FOOTER //\n// ./test/demo/another.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8******"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"another.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/compare-test.js b/test/serve/js/compare-test.js
index e071aac556420d508b2c86e88cb3306cff761cf8..5b4731ad58dded2942f3d13a4603eb28aeea0c9b 100644
--- a/test/serve/js/compare-test.js
+++ b/test/serve/js/compare-test.js
@@ -63,2286 +63,17 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 35);
+/******/ 	return __webpack_require__(__webpack_require__.s = 2);
 /******/ })
 /************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
+/******/ ({
 
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-/* 1 */
+/***/ 2:
 /***/ (function(module, exports) {
 
-module.exports = $;
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-module.exports = ol;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util');
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-        .replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
-        return v.toString(16);
-    });
-}
-nm.makeGuid = makeGuid;
-exports.default = makeGuid;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapPopupCls_1 = __webpack_require__(12);
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-exports.mapPopup = new mapPopupCls_1.default();
-exports.default = exports.mapPopup;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/8/2015.
- */
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers');
-/**
- * base interaction
- */
-var MapInteractionBase = (function () {
-    /**
-     * map interaction base
-     * @param subtype - the interaction subtype
-     */
-    function MapInteractionBase(subtype) {
-        this._map = null;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-    /**
-     * base initializer, returns true for already initialized
-     * @param theMap - the ol Map
-     * @returns true for already initialized
-     */
-    MapInteractionBase.prototype.init = function (theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-        }
-    };
-    Object.defineProperty(MapInteractionBase.prototype, "map", {
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-        get: function () {
-            return this._map;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-        get: function () {
-            return this._initialized;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    MapInteractionBase.prototype._checkInit = function () {
-        if (!this.initialized) {
-            var msg = this._subtype + " object not initialized";
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    };
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    MapInteractionBase.prototype.checkInit = function () {
-        this._checkInit();
-    };
-    return MapInteractionBase;
-}());
-exports.MapInteractionBase = MapInteractionBase;
-nm.MapInteractionBase = MapInteractionBase;
-exports.default = MapInteractionBase;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapMoveCls_1 = __webpack_require__(11);
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-exports.mapMove = new mapMoveCls_1.default();
-exports.default = exports.mapMove;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = __webpack_require__(13);
-var provide_1 = __webpack_require__(0);
-var mapMove_1 = __webpack_require__(6);
-var mapPopup_1 = __webpack_require__(4);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    if (options === void 0) { options = {}; }
-    var m = quickMapBase_1.quickMapBase(options);
-    mapMove_1.default.init(m);
-    mapPopup_1.default.init(m);
-    return m;
-}
-exports.quickMap = quickMap;
-nm.quickMap = quickMap;
-exports.default = quickMap;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var zoomResolutionConvert = __webpack_require__(14);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The base layer class
- * @abstract
- */
-var LayerBase = (function () {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-    function LayerBase(url, options) {
-        if (options === void 0) { options = {}; }
-        options = options || {};
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-        this._params = typeof options.params == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-        this.id = options.id || makeGuid_1.default();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        }
-        else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        this._source = undefined;
-        /**
-         *
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
-        };
-        this._legendContent = '';
-        if (this._legendCheckbox) {
-            this._legendContent += "<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " " +
-                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
-            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        else {
-            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBase.prototype._load = function () {
-        if (this.loaded == true) {
-            return true;
-        }
-        else {
-            this._loaded = true;
-            return false;
-        }
-    };
-    /**
-     * Get the legend html, be sure to only add to the DOM once
-     * @returns {string} html for layer wrapped in a div
-     */
-    LayerBase.prototype.getLegendDiv = function () {
-        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
-    };
-    /**
-     *
-     * @param additionalContent - additional content to add to legend
-     * @private
-     */
-    LayerBase.prototype._addLegendContent = function (additionalContent) {
-        if (additionalContent === void 0) { additionalContent = ''; }
-        var addCollapse = additionalContent.indexOf('<ul>') > -1;
-        if (addCollapse) {
-            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-        }
-        this._legendContent += additionalContent;
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            this._$legendDiv.append(additionalContent);
-            this.applyCollapse();
-        }
-    };
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=] - additonal content to add
-     */
-    LayerBase.prototype.addLegendContent = function (additionalContent) {
-        this._addLegendContent(additionalContent);
-    };
-    LayerBase.prototype.applyCollapse = function () {
-        if (this._applyCollapseCalled) {
-            console.log('collapse already applied');
-            return undefined;
-        }
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            var $expander = this._$legendDiv.find('.legend-items-expander');
-            if ($expander.length > 0) {
-                this._applyCollapseCalled = true;
-                $expander.click(function () {
-                    var $this = $(this);
-                    $this.siblings('ul').slideToggle();
-                    if ($this.hasClass('legend-layer-group-collapsed')) {
-                        $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&#9660;');
-                    }
-                    else {
-                        $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&#9654;');
-                    }
-                });
-                if (this._legendCollapse) {
-                    $expander.trigger('click');
-                }
-            }
-        }
-    };
-    /**
-     * trick to refresh the layer
-     */
-    LayerBase.prototype.refresh = function () {
-        if (this.source) {
-            this.source.refresh();
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "id", {
-        get: function () {
-            return this._id;
-        },
-        set: function (newId) {
-            this._id = newId;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "animate", {
-        get: function () {
-            return this._animate;
-        },
-        set: function (animate) {
-            this._animate = animate;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "legendContent", {
-        /**
-         * get the legend content
-         * @type {string}
-         */
-        get: function () {
-            return this._legendContent;
-        },
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        set: function (newVal) {
-            this._legendContent = newVal;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "params", {
-        /**
-         * get the map get params
-         * @type {object}
-         */
-        get: function () {
-            return this._params;
-        },
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        set: function (newParams) {
-            this._params = newParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minResolution", {
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxResolution", {
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minZoom", {
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxZoom", {
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "url", {
-        /**
-         * get the url
-         * @type {string}
-         */
-        get: function () {
-            return this._url;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "visible", {
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * set the visibility
-         * @param visibility
-         */
-        set: function (visibility) {
-            this.setVisible(visibility);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setVisible = function (visibility) {
-        this._visible = visibility;
-        if (this.olLayer) {
-            this.olLayer.setVisible(this._visible);
-            if (visibility && !this._loaded) {
-                this._load();
-            }
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "opacity", {
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-        get: function () {
-            return this._opacity;
-        },
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        set: function (opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "name", {
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-        get: function () {
-            return this._name;
-        },
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        set: function (newName) {
-            this._name = newName;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "loaded", {
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-        get: function () {
-            return this._loaded;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "source", {
-        /**
-         * get the layer source
-         * @type {*}
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getSource = function () {
-        return this._source;
-    };
-    Object.defineProperty(LayerBase.prototype, "zIndex", {
-        /**
-         * get the z index
-         */
-        get: function () {
-            return this._zIndex;
-        },
-        /**
-         * set the z index
-         */
-        set: function (newZ) {
-            this._zIndex = newZ;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setZIndex = function (newZ) {
-    };
-    Object.defineProperty(LayerBase.prototype, "olLayer", {
-        /**
-         * the the ol layer
-         */
-        get: function () {
-            return this.getOlLayer();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getOlLayer = function () {
-        return this._olLayer;
-    };
-    return LayerBase;
-}());
-exports.LayerBase = LayerBase;
-nm.LayerBase = LayerBase;
-exports.default = LayerBase;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util.checkDefined');
-/**
- * check if the input is undefined or null
- * @param input - input pointer
- * @returns true undefined or null
- */
-function undefinedOrNull(input) {
-    "use strict";
-    return (typeof input === 'undefined' || input === null);
-}
-exports.undefinedOrNull = undefinedOrNull;
-nm.undefinedOrNull = undefinedOrNull;
-/**
- * check if the input is defined and not null
- * @param input - input pointer
- * @returns true defined and not null
- */
-function definedAndNotNull(input) {
-    "use strict";
-    return !(undefinedOrNull(input));
-}
-exports.definedAndNotNull = definedAndNotNull;
-nm.definedAndNotNull = definedAndNotNull;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/7/2015.
- */
-var LayerBase_1 = __webpack_require__(8);
-var esriToOl = __webpack_require__(15);
-var mapPopup_1 = __webpack_require__(4);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-var LayerEsriMapServer = (function (_super) {
-    __extends(LayerEsriMapServer, _super);
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} [options] - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
-     */
-    function LayerEsriMapServer(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new ol.source.TileArcGISRest({
-            url: _this.url == '' ? undefined : _this.url,
-            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
-        });
-        _this._olLayer = new ol.layer.Tile({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
-        });
-        _this._olLayer.setZIndex(_this._zIndex);
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-        _this._esriFormat = new ol.format.EsriJSON();
-        _this._popupRequest = null;
-        _this.addLegendContent();
-        if (options.addPopup) {
-            mapPopup_1.default.addMapServicePopup(_this);
-        }
-        return _this;
-    }
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] !== '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'legend?f=pjson&callback=?';
-        $.get(urlCopy, {}, function (d) {
-            var newHtml = esriToOl.makeMapServiceLegend(d);
-            _super.prototype.addLegendContent.call(_this, newHtml);
-        }, 'json');
-    };
-    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
-        if (!this.visible) {
-            return;
-        }
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] != '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'identify?callback=?';
-        var __this = this;
-        if (this._popupRequest != null) {
-            this._popupRequest.abort();
-        }
-        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
-                var r = _a[_i];
-                var popupHtml = '<table class="esri-popup-table">';
-                for (var a in r['attributes']) {
-                    if (r['attributes'].hasOwnProperty(a)) {
-                        var attrVal = r['attributes'][a];
-                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                            continue;
-                        }
-                        var attr = a;
-                        if (attr.length > 14) {
-                            attr = attr.slice(0, 11) + '...';
-                        }
-                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
-                    }
-                }
-                popupHtml += '</table>';
-                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);
-            }
-        }, 'json');
-        this._popupRequest.always(function () {
-            __this._popupRequest = null;
-        });
-    };
-    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
-        /**
-         *
-         * @returns {ol.source.TileArcGISRest} the vector source
-         */
-        get: function () {
-            return _super.prototype.getSource.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
-        /**
-         *
-         * @returns the ol layer
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerEsriMapServer;
-}(LayerBase_1.LayerBase));
-exports.LayerEsriMapServer = LayerEsriMapServer;
-nm.LayerEsriMapServer = LayerEsriMapServer;
-exports.default = LayerEsriMapServer;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var checkDefined = __webpack_require__(9);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-var MapMoveCls = (function (_super) {
-    __extends(MapMoveCls, _super);
-    /**
-     * constructor called implicitly
-     */
-    function MapMoveCls() {
-        var _this = _super.call(this, 'map move') || this;
-        _this._arrLyrRequest = [];
-        _this._arrLyrTimeout = [];
-        _this._arrLayer = [];
-        _this._lookupLayer = {};
-        _this._mapMoveCallbacks = [];
-        _this._mapMoveCallbacksLookup = {};
-        _this._mapMoveCallbackDelays = [];
-        _this._mapMoveCallbackContext = [];
-        _this._mapMoveCallbackTimeout = [];
-        _this._mapExtent = undefined;
-        _this._zoomLevel = undefined;
-        return _this;
-    }
-    /**
-     * initialize the map move object
-     * @param theMap - the ol map
-     */
-    MapMoveCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-            _this._updateMapExtent();
-            // trigger the layer updates
-            for (var i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-            // trigger the map callbacks
-            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    };
-    MapMoveCls.prototype._updateMapExtent = function () {
-        var theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-        var extentArray = theView.calculateExtent(this.map.getSize());
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    };
-    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
-        /**
-         * return the map extent
-         */
-        get: function () {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-            return this._mapExtent;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Trigger the layer load
-     * @param lyr the layer being acted on
-     * @param index index of the layer
-     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
-        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        }
-        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        }
-        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-        // dummy callback used if before load returns false
-        var callbackFunc = function () { };
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-            var __this_1 = this;
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    var _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
-                        /**
-                         * @type {LayerBaseVector}
-                         */
-                        theLayer.mapMoveCallback(d);
-                        theLayer.loadCallback();
-                    }, 'json').fail(function (jqXHR) {
-                        if (jqXHR.statusText != 'abort') {
-                            console.log('failed');
-                            console.log(theLayer.url);
-                            console.log(theLayer.mapMoveParams);
-                        }
-                    }).always(function () {
-                        _innerThis._arrLyrTimeout[theIndex] = null;
-                        _innerThis._arrLyrRequest[theIndex] = null;
-                    });
-                }
-                innerFunction.call(__this_1, lyr, index);
-            };
-        }
-        else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    };
-    /**
-     * trigger the map move call back at the given index
-     * @param ind - the index of the layer
-     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
-     * @param functionId=undefined the function id used to reference the added callback function
-     */
-    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
-        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
-            throw 'either the function index or the id must be defined';
-        }
-        if (typeof ind !== 'number') {
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-        if (ind < 0) {
-            console.log('function not found');
-            return;
-        }
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-        var ctx = this._mapMoveCallbackContext[ind];
-        var theFunc = this._mapMoveCallbacks[ind];
-        var __this = this;
-        var f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);
-            }
-            else {
-                theFunc(__this._mapExtent, __this._zoomLevel, eventType);
-            }
-        };
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    };
-    /**
-     * Add a layer to the interaction
-     * @param  lyr - layer to add
-     * @param triggerOnAdd - if the layer should be loaded on add
-     */
-    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
-        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-            return;
-        }
-        this._checkInit();
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    };
-    /**
-     * add a callback to the map move event
-     * @param func - callback function
-     * @param context - the context to use for this function
-     * @param delay=50 the delay before call load
-     * @param triggerOnAdd if the layer should be loaded on add to mapMove
-     * @param functionId optional id to reference the function later for outside triggering
-     */
-    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-            return;
-        }
-        this._checkInit();
-        if (!functionId) {
-            functionId = makeGuid_1.default();
-        }
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = functionId;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    };
-    return MapMoveCls;
-}(mapInteractionBase_1.default));
-exports.MapMoveCls = MapMoveCls;
-nm.MapMoveCls = MapMoveCls;
-exports.default = MapMoveCls;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-var FeatureLayerProperties = (function () {
-    /**
-     *
-     * @param feature the feature
-     * @param layer - the layer in the popup
-     * @param layerIndex - index of the layer
-     * @param selectionLayer - the ol selection layer
-     * @param [esriLayerName=undefined] - esri layer name
-     */
-    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
-        get: function () {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            }
-            else {
-                return this.layer.name;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FeatureLayerProperties;
-}());
-exports.FeatureLayerProperties = FeatureLayerProperties;
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-var MapPopupCls = (function (_super) {
-    __extends(MapPopupCls, _super);
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-    /**
-     * map popup constructor
-     */
-    function MapPopupCls() {
-        var _this = _super.call(this, 'map popup') || this;
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayerNames = [];
-        _this._arrPopupLayers = [];
-        _this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        _this._esriMapServiceLayers = [];
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-        _this._passThroughLayerFeatureArray = [];
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-        return _this;
-    }
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-    MapPopupCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        var $map;
-        var target = this.map.getTarget();
-        if (typeof target == 'string') {
-            $map = $('#' + target);
-        }
-        else {
-            $map = $(target);
-        }
-        $map.append('<div class="ol-popup">' +
-            '<span class="ol-popup-closer">X</span>' +
-            '<div class="popup-content"></div>' +
-            '</div>');
-        this._$popupContainer = $map.find('.ol-popup');
-        this._$popupContent = $map.find('.popup-content');
-        this._$popupCloser = $map.find('.ol-popup-closer');
-        var _ease = function (n) {
-            return ol.easing.inAndOut(n);
-        };
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
-            autoPanAnimation: {
-                duration: 250,
-                source: theMap.getView().getCenter(),
-                easing: _ease
-            }
-        });
-        this._map.addOverlay(this._popupOverlay);
-        this._$popupCloser.click(function (evt) {
-            _this.closePopup();
-        });
-        // display popup on click
-        this._map.on('singleclick', function (evt) {
-            _this.closePopup();
-            _this._popupCoordinate = evt['coordinate'];
-            // esri map service layers
-            if (_this._esriMapServiceLayers.length > 0) {
-                var queryParams = {
-                    geometry: evt['coordinate'].join(','),
-                    geometryType: 'esriGeometryPoint',
-                    layers: 'all',
-                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
-                    imageDisplay: _this._map.getSize().join(',') + ',96',
-                    returnGeometry: true,
-                    tolerance: 15,
-                    f: 'pjson'
-                };
-                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
-                    var l = _a[_i];
-                    l.getPopupInfo(queryParams);
-                }
-            }
-            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
-            _this._passThroughLayerFeatureArray = [];
-            _this._currentPopupIndex = -1;
-            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                var featObj = layerFeatureObjectArray[i];
-                var props = featObj.feature.getProperties();
-                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
-                //skip if return was false
-                if (popupContentResponse === false) {
-                    //continue;
-                }
-                else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
-                    _this._passThroughLayerFeatureArray.push(featObj);
-                }
-                else {
-                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                }
-            }
-            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
-            _this._currentPopupIndex = -1;
-            var popupHtml = '<div class="ol-popup-nav">';
-            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
-            popupHtml += "<span>&nbsp;of&nbsp;</span>";
-            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
-            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
-            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
-            popupHtml += '</div>';
-            popupHtml += '<div class="ol-popup-inner">';
-            popupHtml += '</div>';
-            _this._$popupContent.html(popupHtml);
-            _this._$popupContent.find('.previous-popup').click(function () {
-                if (_this._popupContentLength == 1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == 0) {
-                    _this._currentPopupIndex = _this._popupContentLength - 1;
-                }
-                else {
-                    _this._currentPopupIndex--;
-                }
-                _this._triggerFeatSelect();
-            });
-            var nextPopup = _this._$popupContent.find('.next-popup');
-            nextPopup.click(function () {
-                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
-                    _this._currentPopupIndex = 0;
-                }
-                else {
-                    _this._currentPopupIndex++;
-                }
-                _this._triggerFeatSelect();
-            });
-            if (_this._popupContentLength > 0) {
-                nextPopup.trigger('click');
-                _this._popupOverlay.setPosition(_this._popupCoordinate);
-                _this._$popupContent.scrollTop(0);
-                _this._popupOpen = true;
-            }
-        });
-        //change mouse cursor when over marker
-        this._map.on('pointermove', function (evt) {
-            if (evt['dragging']) {
-                return;
-            }
-            var pixel = _this.map.getEventPixel(evt['originalEvent']);
-            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
-                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
-                    var olLayer = _a[_i];
-                    if (lyrCandidate == olLayer) {
-                        return true;
-                    }
-                }
-                return false;
-            });
-            var mapElement = _this.map.getTargetElement();
-            mapElement.style.cursor = hit ? 'pointer' : '';
-        });
-        return true;
-    };
-    /**
-     * helper to select features
-     * @private
-     */
-    MapPopupCls.prototype._triggerFeatSelect = function () {
-        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-        this.clearSelection();
-        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-        $layerNameSpan.html(lyrFeatObj.layerName);
-        $innerPopup.html(lyrFeatObj.popupContent);
-        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f(this._$popupContent);
-        }
-    };
-    /**
-     *
-     * @param feature - the ol feature
-     * @param {LayerEsriMapServer} lyr - the map server layer
-     * @param {string} popupContent - popup content
-     * @param {string} esriName - esri layer name
-     */
-    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
-        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
-        featLayerObject.popupContent = popupContent;
-        this._passThroughLayerFeatureArray.push(featLayerObject);
-        this._popupContentLength++;
-        $('.popup-content-length').html(this._popupContentLength.toFixed());
-        if (!this._popupOpen) {
-            this._$popupContent.find('.next-popup').trigger('click');
-            this._popupOverlay.setPosition(this._popupCoordinate);
-            this._$popupContent.scrollTop(0);
-            this._popupOpen = true;
-        }
-    };
-    /**
-     *
-     * @param  pixel - the ol pixel
-     * @returns  feature layer properties
-     * @private
-     */
-    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
-        var _this = this;
-        var layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
-            }
-        });
-        return layerFeatureObjectArray;
-    };
-    MapPopupCls.prototype.closePopup = function () {
-        this._checkInit();
-        this._popupOpen = false;
-        this._popupOverlay.setPosition(undefined);
-        this._$popupCloser[0].blur();
-        this.clearSelection();
-        this._$popupContent.html('');
-        return false;
-    };
-    ;
-    /**
-     *
-     * @param chgFunction - popup change function
-     */
-    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
-        this._popupChangedFunctions.push(chgFunction);
-    };
-    /**
-     *
-     * @param {LayerBase|*} lyr - the layer being acted on
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns  the new selection layer
-     * @private
-     */
-    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
-        this._checkInit();
-        selectionStyle = selectionStyle || {};
-        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-        selectionStyle.width = selectionStyle.width || 10;
-        var theStyle;
-        if (selectionStyle.olStyle) {
-            theStyle = selectionStyle.olStyle;
-        }
-        else {
-            theStyle = new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: selectionStyle.color,
-                    width: selectionStyle.width
-                }),
-                image: new ol.style.Circle({
-                    radius: 7,
-                    fill: new ol.style.Fill({ color: selectionStyle.color }),
-                    stroke: new ol.style.Stroke({ color: selectionStyle.color, width: 1 })
-                }),
-                fill: new ol.style.Fill({
-                    color: selectionStyle.color
-                })
-            });
-        }
-        var selectionLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: theStyle
-        });
-        selectionLayer.setZIndex(100);
-        this._selectionLayers.push(selectionLayer);
-        this._selectionLayerLookup[lyr.id] = selectionLayer;
-        this.map.addLayer(selectionLayer);
-        return selectionLayer;
-    };
-    /**
-     * Add popup to the map
-     * @param {LayerBase|*} lyr The layer that the popup with act on
-     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._arrPopupLayerIds.push(lyr.id);
-        this._arrPopupLayerNames.push(lyr.name);
-        this._arrPopupLayers.push(lyr);
-        this._arrPopupOlLayers.push(lyr.olLayer);
-        this._arrPopupContentFunction.push(popupContentFunction);
-        return selectionLayer;
-    };
-    ;
-    /**
-     *
-     * @param {LayerBase} lyr - layer
-     */
-    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
-        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
-        if (idx > -1) {
-            this._arrPopupLayerIds.splice(idx, 1);
-            this._arrPopupLayerNames.splice(idx, 1);
-            this._arrPopupLayers.splice(idx, 1);
-            this._arrPopupOlLayers.splice(idx, 1);
-            this._arrPopupContentFunction.splice(idx, 1);
-            this._selectionLayers.splice(idx, 1);
-            delete this._selectionLayerLookup[lyr.id];
-        }
-    };
-    /**
-     *
-     * @param {LayerEsriMapServer} lyr - map server layer
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._esriMapServiceLayers.push(lyr);
-        return selectionLayer;
-    };
-    MapPopupCls.prototype.clearSelection = function () {
-        this._checkInit();
-        for (var i = 0; i < this._selectionLayers.length; i++) {
-            this._selectionLayers[i].getSource().clear();
-        }
-        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f();
-        }
-    };
-    ;
-    /**
-     * Add a function to be called when the map is clicked but before any popups are implemented
-     * @param {function} func - the map click function
-     */
-    MapPopupCls.prototype.addMapClickFunction = function (func) {
-        this._mapClickFunctions.push(func);
-    };
-    return MapPopupCls;
-}(mapInteractionBase_1.default));
-exports.MapPopupCls = MapPopupCls;
-nm.MapPopupCls = MapPopupCls;
-exports.default = MapPopupCls;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param [options={}] config options
- * @param [options.divId=map] map div id
- * @param [options.center={}] center config object
- * @param [options.center.x=-10018378] center x, web mercator x or lon
- * @param [options.center.y=5574910] center y, web mercator y or lat
- * @param [options.zoom=7] zoom level
- * @param [options.minZoom=undefined] min zoom
- * @param [options.maxZoom=undefined] max zoom
- * @param [options.baseSwitcher=true] if add base map switcher
- * @param [options.fullScreen=false] if add base map switcher
- * @returns the ol map
- */
-function quickMapBase(options) {
-    if (options === void 0) { options = {}; }
-    options.divId = options.divId || 'map';
-    options.center = options.center || { x: -10018378, y: 5574910 };
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-    var $mapDiv = $('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-    var osmLayer = new ol.layer.Tile({ source: new ol.source.OSM() });
-    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-    if (options.baseSwitcher) {
-        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-        //  switcherContent += '"></div>';
-        //  $mapDiv.append(switcherContent);
-        //
-        // $mapDiv.find('.base-map-switcher').click(function() {
-        //      "use strict";
-        //      osmLayer.setVisible(!osmLayer.getVisible());
-        //      satLayer.setVisible(!satLayer.getVisible());
-        //
-        //      if (osmLayer.getVisible()){
-        //          $(this).css('background', aerialCss);
-        //      } else {
-        //          $(this).css('background', osmCss);
-        //      }
-        //  });
-    }
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new ol.geom.Point([options.center.x, options.center.y]);
-        new ol.proj.Projection({ code: "EPSG:4326" });
-        p.transform(new ol.proj.Projection({ code: "EPSG:4326" }), new ol.proj.Projection({ code: "EPSG:3857" }));
-        var coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-    var controls = ol.control.defaults({
-        attributionOptions: { collapsible: false }
-    });
-    var view = new ol.View({
-        center: [options.center.x, options.center.y],
-        zoom: options.zoom,
-        minZoom: options.minZoom,
-        maxZoom: options.maxZoom
-    });
-    var map = new ol.Map({
-        layers: [osmLayer],
-        target: options.divId,
-        controls: controls,
-        view: view
-    });
-    if (options.fullScreen) {
-        map.addControl(new ol.control.FullScreen({}));
-    }
-    return map;
-}
-exports.quickMapBase = quickMapBase;
-nm.quickMapBase = quickMapBase;
-exports.default = quickMapBase;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers.zoomResolutionConvert');
-var _zoomResLookup = [
-    156543.03392804097,
-    78271.51696402048,
-    39135.75848201024,
-    19567.87924100512,
-    9783.93962050256,
-    4891.96981025128,
-    2445.98490512564,
-    1222.99245256282,
-    611.49622628141,
-    305.748113140705,
-    152.8740565703525,
-    76.43702828517625,
-    38.21851414258813,
-    19.109257071294063,
-    9.554628535647032,
-    4.777314267823516,
-    2.388657133911758,
-    1.194328566955879,
-    0.5971642834779395,
-    0.29858214173896974,
-    0.14929107086948487,
-    0.07464553543474244,
-    0.03732276771737122,
-    0.01866138385868561,
-    0.009330691929342804,
-    0.004665345964671402,
-    0.002332672982335701,
-    0.0011663364911678506,
-    0.0005831682455839253 //28
-];
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-function zoomToResolution(zoomLevel) {
-    "use strict";
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        }
-        else {
-            console.log("invalid zoom level provided: " + zoomLevel);
-            return undefined;
-        }
-    }
-    else {
-        return undefined;
-    }
-}
-exports.zoomToResolution = zoomToResolution;
-nm.zoomToResolution = zoomToResolution;
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
-        if (resolution >= _zoomResLookup[i]) {
-            return i;
-        }
-    }
-    return 0;
-}
-exports.resolutionToZoom = resolutionToZoom;
-nm.resolutionToZoom = resolutionToZoom;
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 1/4/2016.
- */
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var nm = provide_1.default('olHelpers.esriToOlStyle');
-/**
- * This callback is displayed as part of the Requester class.
- * @callback styleFunc
- * @param {ol.Feature} feat - openlayers feature
- * @param {number} resolution - map resolution
- */
-/**
- *
- * @param {Array<number>} colorArray - input color array
- * @param {number} opacity - the opacity 0 to 1
- * @returns {string} rgba string
- * @private
- */
-function _colorArrayToRgba(colorArray, opacity) {
-    "use strict";
-    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
-}
-/**
- * escape html charcters
- * @param {string} str - input string
- * @returns {string} escaped string
- */
-function htmlEscape(str) {
-    return String(str)
-        .replace(/&/g, '&amp;')
-        .replace(/"/g, '&quot;')
-        .replace(/'/g, '&#39;')
-        .replace(/</g, '&lt;')
-        .replace(/>/g, '&gt;');
-}
-nm.htmlEscape = htmlEscape;
-var CommonSymbol = (function () {
-    /**
-     *
-     * @param symbolObj
-     * @param {number} opacity
-     */
-    function CommonSymbol(symbolObj, opacity) {
-        this.symbolObj = symbolObj;
-        this.opacity = opacity;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return CommonSymbol;
-}());
-var PointSymbol = (function (_super) {
-    __extends(PointSymbol, _super);
-    function PointSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSMS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                var radius = _this.symbolObj.size;
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Circle({
-                        radius: radius,
-                        fill: new ol.style.Fill({
-                            color: innerColor
-                        }),
-                        stroke: new ol.style.Stroke({ color: outerColor, width: outlineWidth })
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
-                break;
-            case 'esriPMS':
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Icon({ src: "data:image/png;base64," + _this.symbolObj['imageData'] })
-                });
-                _this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + _this.symbolObj['imageData'] + "\">";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PointSymbol;
-}(CommonSymbol));
-var LineSymbol = (function (_super) {
-    __extends(LineSymbol, _super);
-    function LineSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSLS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var lineWidth = _this.symbolObj.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: innerColor,
-                        //lineDash: [4],
-                        width: lineWidth
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 4px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: -1px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return LineSymbol;
-}(CommonSymbol));
-var PolygonSymbol = (function (_super) {
-    __extends(PolygonSymbol, _super);
-    function PolygonSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj['type']) {
-            case 'esriSFS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: outerColor,
-                        //lineDash: [4],
-                        width: outlineWidth
-                    }),
-                    fill: new ol.style.Fill({
-                        color: innerColor
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "border: solid " + outerColor + " 1px;";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 9px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: 2px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PolygonSymbol;
-}(CommonSymbol));
-var SymbolGenerator = (function () {
-    function SymbolGenerator(esriResponse) {
-        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-        this.renderer = esriResponse.drawingInfo.renderer;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return SymbolGenerator;
-}());
-var SingleSymbol = (function (_super) {
-    __extends(SingleSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the symbol class to use
-     */
-    function SingleSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.symbol = _this.renderer.symbol;
-        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);
-        _this.olStyle = symbolObj.olStyle;
-        _this.legendHtml = symbolObj.legendHtml;
-        return _this;
-    }
-    return SingleSymbol;
-}(SymbolGenerator));
-var UniqueValueSymbol = (function (_super) {
-    __extends(UniqueValueSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the Symbol class definition
-     */
-    function UniqueValueSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];
-        _this.propertyName = _this.renderer['field1'];
-        _this.defaultSymbol = _this.renderer['defaultSymbol'];
-        if (_this.defaultSymbol) {
-            var symbolObj = new SymbolClass(_this.defaultSymbol, _this.opacity);
-            _this.defaultStyle = symbolObj.olStyle;
-            _this.defaultLabelHtml = "<span class=\"legend-layer-subitem\">" + htmlEscape(_this.renderer['defaultLabel']) + "</span>" + symbolObj.legendHtml;
-        }
-        else {
-            _this.defaultStyle = undefined;
-            _this.defaultLabelHtml = 'other';
-        }
-        _this.valueArray = [];
-        _this.labelArray = [];
-        _this.legendArray = [];
-        _this.propertyStyleLookup = {};
-        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {
-            var uniqueVal = _a[_i];
-            _this.labelArray.push(uniqueVal['label']);
-            _this.valueArray.push(uniqueVal['value']);
-            var uniqueSym = new SymbolClass(uniqueVal.symbol, _this.opacity);
-            _this.legendArray.push("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>" + uniqueSym.legendHtml);
-            _this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
-        }
-        _this.olStyle = function (feature) {
-            var checkProperties = feature.getProperties();
-            var checkProperty = checkProperties[_this.propertyName];
-            var returnValue;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
-            }
-            else {
-                returnValue = [_this.defaultStyle];
-            }
-            return returnValue;
-        };
-        if (_this.defaultLabelHtml !== null) {
-            _this.legendArray.push(_this.defaultLabelHtml);
-        }
-        _this.legendHtml = '<ul>';
-        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {
-            var h = _c[_b];
-            _this.legendHtml += "<li>" + h + "</li>";
-        }
-        _this.legendHtml += '</ul>';
-        return _this;
-    }
-    return UniqueValueSymbol;
-}(SymbolGenerator));
-/**
- * style and legend object
- * @typedef {object} styleAndLegend
- * @property {styleFunc} style - style function
- * @property {string} legend - legend content
- */
-/**
- *
- * @param {object} esriResponse - layer info
- * @returns {styleAndLegend} style and legend object
- */
-function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    "use strict";
-    var renderer = esriResponse.drawingInfo.renderer;
-    var symbolLegendOut = null;
-    switch (renderer.type) {
-        case 'simple':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse.geometryType + ' not handled');
-            }
-            break;
-        case 'uniqueValue':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        default:
-            alert('not handled renderer type: ' + renderer['type']);
-    }
-    if (symbolLegendOut == null) {
-        return { style: undefined, legend: '' };
-    }
-    else {
-        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
-    }
-}
-exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-/**
- *
- * @param {object} lyrObject - the layer as defined in the response
- * @param {boolean} [skipLayerNameAndExpander=false] use only icons
- * @returns {string} legend html
- */
-function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
-    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
-    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
-    var layerName = lyrObject['layerName'];
-    var legendItems = lyrObject['legend'];
-    var legendHtml = '';
-    if (!skipLayerNameAndExpander) {
-        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
-    }
-    if (legendItems.length == 1) {
-        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
-    }
-    else {
-        if (!skipLayerNameAndExpander) {
-            legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
-        }
-        legendHtml += '<ul>';
-        for (var i = 0; i < legendItems.length; i++) {
-            legendHtml += "<li>";
-            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
-            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
-            legendHtml += "</li>";
-        }
-        legendHtml += '</ul>';
-    }
-    if (!skipLayerNameAndExpander) {
-        legendHtml = "<span class=\"legend-layer-subitem\">" + layerName + "</span>" + legendHtml;
-    }
-    return legendHtml;
-}
-/**
- * make map service legent
- * @param {object} esriResponse - layer info
- * @returns {string} legend content
- */
-function makeMapServiceLegend(esriResponse) {
-    "use strict";
-    var newLegendHtml = '';
-    var layers = esriResponse['layers'];
-    if (layers.length == 1) {
-        newLegendHtml += mapServiceLegendItem(layers[0], true);
-    }
-    else {
-        newLegendHtml += '<ul>';
-        for (var i = 0; i < layers.length; i++) {
-            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
-        }
-        newLegendHtml += '</ul>';
-    }
-    return newLegendHtml;
-}
-exports.makeMapServiceLegend = makeMapServiceLegend;
-nm.makeMapServiceLegend = makeMapServiceLegend;
-
-
-/***/ }),
-/* 16 */,
-/* 17 */,
-/* 18 */,
-/* 19 */,
-/* 20 */,
-/* 21 */,
-/* 22 */,
-/* 23 */,
-/* 24 */,
-/* 25 */,
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 6/1/2016.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('collections.layerSwipe');
-var LayerSwipe = (function () {
-    /**
-     *
-     * @param {ol.Map} map - the map
-     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
-     */
-    function LayerSwipe(map, sliderContent) {
-        if (sliderContent === void 0) { sliderContent = ''; }
-        var _this = this;
-        sliderContent = sliderContent || '';
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.leftLayers = [];
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.rightLayers = [];
-        this._percentRight = 50;
-        this.offset = null;
-        this._map = map;
-        this.$mapElement = $(map.getTargetElement());
-        this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>");
-        this.$swiper = this.$mapElement.find('.layer-swiper');
-        this.percentRight = this.percentRight;
-        this.dragging = false;
-        this.$mapElement.mouseleave(function () {
-            _this.dragging = false;
-        });
-        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
-            evt.preventDefault();
-        });
-        this.$swiper.mousedown(function (evt) {
-            _this.dragging = true;
-            _this.offset = evt.offsetX;
-        });
-        $(window).mouseup(function () {
-            _this.dragging = false;
-        });
-        this.$mapElement.mousemove(function (evt) {
-            if (_this.dragging) {
-                var mapLeft = _this.$mapElement.position().left;
-                var mapWidth = _this.$mapElement.width();
-                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
-            }
-        });
-    }
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to left side
-     */
-    LayerSwipe.prototype.addLeftLayer = function (lyr) {
-        var _this = this;
-        if (this.leftLayers.indexOf(lyr) != -1) {
-            return;
-        }
-        lyr.olLayer.on('precompose', function (event) {
-            var ctx = event['context'];
-            var width = ctx.canvas.width * (_this.percentRight / 100);
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(0, 0, width, ctx.canvas.height);
-            ctx.clip();
-        });
-        lyr.olLayer.on('postcompose', function (event) {
-            var ctx = event['context'];
-            ctx.restore();
-        });
-        this.leftLayers.push(lyr);
-    };
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to right side
-     */
-    LayerSwipe.prototype.addRightLayer = function (lyr) {
-        var _this = this;
-        if (this.rightLayers.indexOf(lyr) != -1) {
-            return;
-        }
-        lyr.olLayer.on('precompose', function (event) {
-            var ctx = event['context'];
-            var width = ctx.canvas.width * (_this.percentRight / 100);
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
-            ctx.clip();
-        });
-        lyr.olLayer.on('postcompose', function (event) {
-            var ctx = event['context'];
-            ctx.restore();
-        });
-        this.rightLayers.push(lyr);
-    };
-    Object.defineProperty(LayerSwipe.prototype, "percentRight", {
-        get: function () {
-            return this._percentRight;
-        },
-        set: function (percent) {
-            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
-            if (percent < 0) {
-                return;
-            }
-            else if (maxed && percent > this.percentRight) {
-                return;
-            }
-            this._percentRight = percent;
-            this.$swiper.css('left', this._percentRight.toFixed(2) + "%");
-            this._map.render();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerSwipe;
-}());
-nm.LayerSwipe = LayerSwipe;
-exports.default = LayerSwipe;
-
-
-/***/ }),
-/* 27 */,
-/* 28 */,
-/* 29 */,
-/* 30 */,
-/* 31 */,
-/* 32 */,
-/* 33 */,
-/* 34 */,
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 6/1/2016.
- */
-var quickMap_1 = __webpack_require__(7);
-var layerSwipe_1 = __webpack_require__(26);
-var LayerEsriMapServer_1 = __webpack_require__(10);
-var map = quickMap_1.quickMap();
-var swiper = new layerSwipe_1.default(map);
-var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {
-    minZoom: 6,
-    maxZoom: 12,
-    name: 'WisDOT Regions'
-});
-var metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {
-    minZoom: 7,
-    visible: true,
-    name: 'Metamanager Segments'
-});
-var truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
-    minZoom: 7,
-    visible: true,
-    name: 'truck2014',
-    showLayers: [8]
-});
-var truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
-    minZoom: 7,
-    visible: true,
-    name: 'truck2015',
-    showLayers: [9]
-});
-map.addLayer(wisDotRegions.olLayer);
-map.addLayer(truckSpeed2014.olLayer);
-map.addLayer(truckSpeed2015.olLayer);
-map.addLayer(metamanagerSegments.olLayer);
-swiper.addLeftLayer(wisDotRegions);
-swiper.addRightLayer(metamanagerSegments);
-swiper.addLeftLayer(truckSpeed2014);
-swiper.addRightLayer(truckSpeed2015);
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\compare-test.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
-/******/ ]);
+
+/******/ });
 //# sourceMappingURL=compare-test.js.map
\ No newline at end of file
diff --git a/test/serve/js/compare-test.js.map b/test/serve/js/compare-test.js.map
index 89379774e4bc217bac85f0d6070669a92723996a..93f971dacddba878fd07079656332c1cdef777f7 100644
--- a/test/serve/js/compare-test.js.map
+++ b/test/serve/js/compare-test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83*","webpack:///./src/util/provide.ts?5c82*","webpack:///external \"$\"?57aa*","webpack:///external \"ol\"?81ed*","webpack:///./src/util/makeGuid.ts?e80e*","webpack:///./src/olHelpers/mapPopup.ts?5d6c*","webpack:///./src/olHelpers/mapInteractionBase.ts?f419*","webpack:///./src/olHelpers/mapMove.ts?6a2b*","webpack:///./src/olHelpers/quickMap.ts?1069*","webpack:///./src/layers/LayerBase.ts?bf94*","webpack:///./src/util/checkDefined.ts?bcd7*","webpack:///./src/layers/LayerEsriMapServer.ts?9c85","webpack:///./src/olHelpers/mapMoveCls.ts?cd45*","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7*","webpack:///./src/olHelpers/quickMapBase.ts?fb65*","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b*","webpack:///./src/olHelpers/esriToOlStyle.ts?9363","webpack:///./src/olHelpers/layerSwipe.ts","webpack:///./test/demo/compare-test.ts"],"names":[],"mappings":"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","file":"compare-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 35);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","module.exports = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 2\n// module chunks = 0 1 2 3","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/makeGuid.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopup.ts","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapInteractionBase.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMove.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nimport ol = require('custom-ol');\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): ol.Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMap.ts","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport makeGuid from '../util/makeGuid';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: ol.source.Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: ol.layer.Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBase.ts","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/checkDefined.ts","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.Tile,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerEsriMapServer.ts","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = functionId;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMoveCls.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: ol.Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: ol.Coordinate;\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: Object;\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupLayerNames: Array<string>;\r\n    private _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return ol.easing.inAndOut(n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector, selectionStyle: {color?: string, width?: number, olStyle?: ol.style.Style}): ol.layer.Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: ol.style.Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopupCls.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): ol.Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    const controls = ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }\r\n    );\r\n\r\n    const view = new ol.View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer],\r\n        target: options.divId,\r\n        controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMapBase.ts","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/zoomResolutionConvert.ts","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface EsriResponse{\r\n    drawingInfo: {\r\n        renderer: EsriRenderer\r\n    },\r\n    geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n    type: string;\r\n    symbol: EsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: string;\r\n        width: number;\r\n    },\r\n    color: string;\r\n    width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: EsriSymbol;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    opacity: number;\r\n    renderer: EsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    constructor(esriResponse: EsriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse.drawingInfo.renderer;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    symbol: EsriSymbol;\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer.symbol;\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n    propertyName: string;\r\n    defaultSymbol: EsriSymbol;\r\n    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: Object;\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse: EsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n\r\n        this.olStyle = (feature: ol.Feature) => {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[this.propertyName];\r\n\r\n            let returnValue;\r\n            if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = null;\r\n\r\n    switch (renderer.type) {\r\n        case 'simple':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse.geometryType + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/esriToOlStyle.ts","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nimport {LayerBase} from \"../layers/LayerBase\";\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections.layerSwipe');\r\n\r\n\r\nclass LayerSwipe {\r\n    leftLayers: Array<LayerBase>;\r\n    rightLayers: Array<LayerBase>;\r\n    _percentRight: number;\r\n    _map: ol.Map;\r\n    $mapElement: JQuery;\r\n    $swiper: JQuery;\r\n    dragging: boolean;\r\n    offset: number;\r\n    /**\r\n     *\r\n     * @param {ol.Map} map - the map\r\n     * @param {string} [sliderContent=''] - additional html to be added inside the slider div\r\n     */\r\n    constructor(map: ol.Map, sliderContent: string = '') {\r\n\r\n        sliderContent = sliderContent || '';\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.leftLayers = [];\r\n\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.rightLayers = [];\r\n\r\n        this._percentRight = 50;\r\n        this.offset = null;\r\n\r\n        this._map = map;\r\n        this.$mapElement = $(map.getTargetElement());\r\n        this.$mapElement.append(`<div class=\"layer-swiper\">${sliderContent}</div>`);\r\n\r\n\r\n        this.$swiper = this.$mapElement.find('.layer-swiper');\r\n        this.percentRight = this.percentRight;\r\n\r\n        this.dragging = false;\r\n\r\n        this.$mapElement.mouseleave(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){\r\n            evt.preventDefault();\r\n        });\r\n\r\n        this.$swiper.mousedown((evt) => {\r\n            this.dragging = true;\r\n            this.offset = evt.offsetX;\r\n        });\r\n\r\n        $(window).mouseup(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$mapElement.mousemove((evt) => {\r\n            if (this.dragging) {\r\n                let mapLeft = this.$mapElement.position().left;\r\n                let mapWidth = this.$mapElement.width();\r\n\r\n                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to left side\r\n     */\r\n    addLeftLayer(lyr) {\r\n\r\n        if (this.leftLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'];\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(0, 0, width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n\r\n\r\n        this.leftLayers.push(lyr);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to right side\r\n     */\r\n    addRightLayer(lyr) {\r\n\r\n        if (this.rightLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'];\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n\r\n        this.rightLayers.push(lyr);\r\n    }\r\n\r\n    get percentRight() : number{\r\n        return this._percentRight;\r\n    }\r\n\r\n    set percentRight(percent: number) {\r\n        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n\r\n        if (percent < 0) {\r\n            return;\r\n        } else if (maxed && percent > this.percentRight) {\r\n            return;\r\n        }\r\n\r\n        this._percentRight = percent;\r\n        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);\r\n        this._map.render();\r\n    }\r\n}\r\n\r\nnm.LayerSwipe = LayerSwipe;\r\nexport default LayerSwipe;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/layerSwipe.ts","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../../src/olHelpers/quickMap';\r\nimport LayerSwipe from '../../src/olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../../src/layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap();\r\n\r\n\r\nlet swiper = new LayerSwipe(map);\r\n\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer',\r\n    {\r\n        minZoom: 6,\r\n        maxZoom: 12,\r\n        name: 'WisDOT Regions'\r\n    });\r\n\r\nlet metamanagerSegments = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'Metamanager Segments'\r\n    });\r\n\r\nlet truckSpeed2014 = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2014',\r\n        showLayers: [8]\r\n    });\r\n\r\nlet truckSpeed2015 = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2015',\r\n        showLayers: [9]\r\n    });\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\n\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/compare-test.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8*****"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"compare-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/itsMap.js b/test/serve/js/itsMap.js
index ac84d3db2e33d3bfccd556eada320895f18cbb9d..70c05e7497434081569d93efc3dbcfa13c484150 100644
--- a/test/serve/js/itsMap.js
+++ b/test/serve/js/itsMap.js
@@ -63,2966 +63,17 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 36);
+/******/ 	return __webpack_require__(__webpack_require__.s = 3);
 /******/ })
 /************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
+/******/ ({
 
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-module.exports = $;
-
-/***/ }),
-/* 2 */
+/***/ 3:
 /***/ (function(module, exports) {
 
-module.exports = ol;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util');
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-        .replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
-        return v.toString(16);
-    });
-}
-nm.makeGuid = makeGuid;
-exports.default = makeGuid;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapPopupCls_1 = __webpack_require__(12);
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-exports.mapPopup = new mapPopupCls_1.default();
-exports.default = exports.mapPopup;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/8/2015.
- */
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers');
-/**
- * base interaction
- */
-var MapInteractionBase = (function () {
-    /**
-     * map interaction base
-     * @param subtype - the interaction subtype
-     */
-    function MapInteractionBase(subtype) {
-        this._map = null;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-    /**
-     * base initializer, returns true for already initialized
-     * @param theMap - the ol Map
-     * @returns true for already initialized
-     */
-    MapInteractionBase.prototype.init = function (theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-        }
-    };
-    Object.defineProperty(MapInteractionBase.prototype, "map", {
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-        get: function () {
-            return this._map;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-        get: function () {
-            return this._initialized;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    MapInteractionBase.prototype._checkInit = function () {
-        if (!this.initialized) {
-            var msg = this._subtype + " object not initialized";
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    };
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    MapInteractionBase.prototype.checkInit = function () {
-        this._checkInit();
-    };
-    return MapInteractionBase;
-}());
-exports.MapInteractionBase = MapInteractionBase;
-nm.MapInteractionBase = MapInteractionBase;
-exports.default = MapInteractionBase;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapMoveCls_1 = __webpack_require__(11);
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-exports.mapMove = new mapMoveCls_1.default();
-exports.default = exports.mapMove;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = __webpack_require__(13);
-var provide_1 = __webpack_require__(0);
-var mapMove_1 = __webpack_require__(6);
-var mapPopup_1 = __webpack_require__(4);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    if (options === void 0) { options = {}; }
-    var m = quickMapBase_1.quickMapBase(options);
-    mapMove_1.default.init(m);
-    mapPopup_1.default.init(m);
-    return m;
-}
-exports.quickMap = quickMap;
-nm.quickMap = quickMap;
-exports.default = quickMap;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var zoomResolutionConvert = __webpack_require__(14);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The base layer class
- * @abstract
- */
-var LayerBase = (function () {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-    function LayerBase(url, options) {
-        if (options === void 0) { options = {}; }
-        options = options || {};
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-        this._params = typeof options.params == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-        this.id = options.id || makeGuid_1.default();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        }
-        else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        this._source = undefined;
-        /**
-         *
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
-        };
-        this._legendContent = '';
-        if (this._legendCheckbox) {
-            this._legendContent += "<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " " +
-                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
-            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        else {
-            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBase.prototype._load = function () {
-        if (this.loaded == true) {
-            return true;
-        }
-        else {
-            this._loaded = true;
-            return false;
-        }
-    };
-    /**
-     * Get the legend html, be sure to only add to the DOM once
-     * @returns {string} html for layer wrapped in a div
-     */
-    LayerBase.prototype.getLegendDiv = function () {
-        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
-    };
-    /**
-     *
-     * @param additionalContent - additional content to add to legend
-     * @private
-     */
-    LayerBase.prototype._addLegendContent = function (additionalContent) {
-        if (additionalContent === void 0) { additionalContent = ''; }
-        var addCollapse = additionalContent.indexOf('<ul>') > -1;
-        if (addCollapse) {
-            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-        }
-        this._legendContent += additionalContent;
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            this._$legendDiv.append(additionalContent);
-            this.applyCollapse();
-        }
-    };
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=] - additonal content to add
-     */
-    LayerBase.prototype.addLegendContent = function (additionalContent) {
-        this._addLegendContent(additionalContent);
-    };
-    LayerBase.prototype.applyCollapse = function () {
-        if (this._applyCollapseCalled) {
-            console.log('collapse already applied');
-            return undefined;
-        }
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            var $expander = this._$legendDiv.find('.legend-items-expander');
-            if ($expander.length > 0) {
-                this._applyCollapseCalled = true;
-                $expander.click(function () {
-                    var $this = $(this);
-                    $this.siblings('ul').slideToggle();
-                    if ($this.hasClass('legend-layer-group-collapsed')) {
-                        $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&#9660;');
-                    }
-                    else {
-                        $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&#9654;');
-                    }
-                });
-                if (this._legendCollapse) {
-                    $expander.trigger('click');
-                }
-            }
-        }
-    };
-    /**
-     * trick to refresh the layer
-     */
-    LayerBase.prototype.refresh = function () {
-        if (this.source) {
-            this.source.refresh();
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "id", {
-        get: function () {
-            return this._id;
-        },
-        set: function (newId) {
-            this._id = newId;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "animate", {
-        get: function () {
-            return this._animate;
-        },
-        set: function (animate) {
-            this._animate = animate;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "legendContent", {
-        /**
-         * get the legend content
-         * @type {string}
-         */
-        get: function () {
-            return this._legendContent;
-        },
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        set: function (newVal) {
-            this._legendContent = newVal;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "params", {
-        /**
-         * get the map get params
-         * @type {object}
-         */
-        get: function () {
-            return this._params;
-        },
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        set: function (newParams) {
-            this._params = newParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minResolution", {
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxResolution", {
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minZoom", {
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxZoom", {
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "url", {
-        /**
-         * get the url
-         * @type {string}
-         */
-        get: function () {
-            return this._url;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "visible", {
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * set the visibility
-         * @param visibility
-         */
-        set: function (visibility) {
-            this.setVisible(visibility);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setVisible = function (visibility) {
-        this._visible = visibility;
-        if (this.olLayer) {
-            this.olLayer.setVisible(this._visible);
-            if (visibility && !this._loaded) {
-                this._load();
-            }
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "opacity", {
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-        get: function () {
-            return this._opacity;
-        },
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        set: function (opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "name", {
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-        get: function () {
-            return this._name;
-        },
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        set: function (newName) {
-            this._name = newName;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "loaded", {
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-        get: function () {
-            return this._loaded;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "source", {
-        /**
-         * get the layer source
-         * @type {*}
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getSource = function () {
-        return this._source;
-    };
-    Object.defineProperty(LayerBase.prototype, "zIndex", {
-        /**
-         * get the z index
-         */
-        get: function () {
-            return this._zIndex;
-        },
-        /**
-         * set the z index
-         */
-        set: function (newZ) {
-            this._zIndex = newZ;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setZIndex = function (newZ) {
-    };
-    Object.defineProperty(LayerBase.prototype, "olLayer", {
-        /**
-         * the the ol layer
-         */
-        get: function () {
-            return this.getOlLayer();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getOlLayer = function () {
-        return this._olLayer;
-    };
-    return LayerBase;
-}());
-exports.LayerBase = LayerBase;
-nm.LayerBase = LayerBase;
-exports.default = LayerBase;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util.checkDefined');
-/**
- * check if the input is undefined or null
- * @param input - input pointer
- * @returns true undefined or null
- */
-function undefinedOrNull(input) {
-    "use strict";
-    return (typeof input === 'undefined' || input === null);
-}
-exports.undefinedOrNull = undefinedOrNull;
-nm.undefinedOrNull = undefinedOrNull;
-/**
- * check if the input is defined and not null
- * @param input - input pointer
- * @returns true defined and not null
- */
-function definedAndNotNull(input) {
-    "use strict";
-    return !(undefinedOrNull(input));
-}
-exports.definedAndNotNull = definedAndNotNull;
-nm.definedAndNotNull = definedAndNotNull;
-
-
-/***/ }),
-/* 10 */,
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var checkDefined = __webpack_require__(9);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-var MapMoveCls = (function (_super) {
-    __extends(MapMoveCls, _super);
-    /**
-     * constructor called implicitly
-     */
-    function MapMoveCls() {
-        var _this = _super.call(this, 'map move') || this;
-        _this._arrLyrRequest = [];
-        _this._arrLyrTimeout = [];
-        _this._arrLayer = [];
-        _this._lookupLayer = {};
-        _this._mapMoveCallbacks = [];
-        _this._mapMoveCallbacksLookup = {};
-        _this._mapMoveCallbackDelays = [];
-        _this._mapMoveCallbackContext = [];
-        _this._mapMoveCallbackTimeout = [];
-        _this._mapExtent = undefined;
-        _this._zoomLevel = undefined;
-        return _this;
-    }
-    /**
-     * initialize the map move object
-     * @param theMap - the ol map
-     */
-    MapMoveCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-            _this._updateMapExtent();
-            // trigger the layer updates
-            for (var i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-            // trigger the map callbacks
-            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    };
-    MapMoveCls.prototype._updateMapExtent = function () {
-        var theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-        var extentArray = theView.calculateExtent(this.map.getSize());
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    };
-    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
-        /**
-         * return the map extent
-         */
-        get: function () {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-            return this._mapExtent;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Trigger the layer load
-     * @param lyr the layer being acted on
-     * @param index index of the layer
-     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
-        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        }
-        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        }
-        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-        // dummy callback used if before load returns false
-        var callbackFunc = function () { };
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-            var __this_1 = this;
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    var _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
-                        /**
-                         * @type {LayerBaseVector}
-                         */
-                        theLayer.mapMoveCallback(d);
-                        theLayer.loadCallback();
-                    }, 'json').fail(function (jqXHR) {
-                        if (jqXHR.statusText != 'abort') {
-                            console.log('failed');
-                            console.log(theLayer.url);
-                            console.log(theLayer.mapMoveParams);
-                        }
-                    }).always(function () {
-                        _innerThis._arrLyrTimeout[theIndex] = null;
-                        _innerThis._arrLyrRequest[theIndex] = null;
-                    });
-                }
-                innerFunction.call(__this_1, lyr, index);
-            };
-        }
-        else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    };
-    /**
-     * trigger the map move call back at the given index
-     * @param ind - the index of the layer
-     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
-     * @param functionId=undefined the function id used to reference the added callback function
-     */
-    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
-        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
-            throw 'either the function index or the id must be defined';
-        }
-        if (typeof ind !== 'number') {
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-        if (ind < 0) {
-            console.log('function not found');
-            return;
-        }
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-        var ctx = this._mapMoveCallbackContext[ind];
-        var theFunc = this._mapMoveCallbacks[ind];
-        var __this = this;
-        var f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);
-            }
-            else {
-                theFunc(__this._mapExtent, __this._zoomLevel, eventType);
-            }
-        };
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    };
-    /**
-     * Add a layer to the interaction
-     * @param  lyr - layer to add
-     * @param triggerOnAdd - if the layer should be loaded on add
-     */
-    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
-        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-            return;
-        }
-        this._checkInit();
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    };
-    /**
-     * add a callback to the map move event
-     * @param func - callback function
-     * @param context - the context to use for this function
-     * @param delay=50 the delay before call load
-     * @param triggerOnAdd if the layer should be loaded on add to mapMove
-     * @param functionId optional id to reference the function later for outside triggering
-     */
-    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-            return;
-        }
-        this._checkInit();
-        if (!functionId) {
-            functionId = makeGuid_1.default();
-        }
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = functionId;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    };
-    return MapMoveCls;
-}(mapInteractionBase_1.default));
-exports.MapMoveCls = MapMoveCls;
-nm.MapMoveCls = MapMoveCls;
-exports.default = MapMoveCls;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-var FeatureLayerProperties = (function () {
-    /**
-     *
-     * @param feature the feature
-     * @param layer - the layer in the popup
-     * @param layerIndex - index of the layer
-     * @param selectionLayer - the ol selection layer
-     * @param [esriLayerName=undefined] - esri layer name
-     */
-    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
-        get: function () {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            }
-            else {
-                return this.layer.name;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FeatureLayerProperties;
-}());
-exports.FeatureLayerProperties = FeatureLayerProperties;
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-var MapPopupCls = (function (_super) {
-    __extends(MapPopupCls, _super);
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-    /**
-     * map popup constructor
-     */
-    function MapPopupCls() {
-        var _this = _super.call(this, 'map popup') || this;
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayerNames = [];
-        _this._arrPopupLayers = [];
-        _this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        _this._esriMapServiceLayers = [];
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-        _this._passThroughLayerFeatureArray = [];
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-        return _this;
-    }
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-    MapPopupCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        var $map;
-        var target = this.map.getTarget();
-        if (typeof target == 'string') {
-            $map = $('#' + target);
-        }
-        else {
-            $map = $(target);
-        }
-        $map.append('<div class="ol-popup">' +
-            '<span class="ol-popup-closer">X</span>' +
-            '<div class="popup-content"></div>' +
-            '</div>');
-        this._$popupContainer = $map.find('.ol-popup');
-        this._$popupContent = $map.find('.popup-content');
-        this._$popupCloser = $map.find('.ol-popup-closer');
-        var _ease = function (n) {
-            return ol.easing.inAndOut(n);
-        };
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
-            autoPanAnimation: {
-                duration: 250,
-                source: theMap.getView().getCenter(),
-                easing: _ease
-            }
-        });
-        this._map.addOverlay(this._popupOverlay);
-        this._$popupCloser.click(function (evt) {
-            _this.closePopup();
-        });
-        // display popup on click
-        this._map.on('singleclick', function (evt) {
-            _this.closePopup();
-            _this._popupCoordinate = evt['coordinate'];
-            // esri map service layers
-            if (_this._esriMapServiceLayers.length > 0) {
-                var queryParams = {
-                    geometry: evt['coordinate'].join(','),
-                    geometryType: 'esriGeometryPoint',
-                    layers: 'all',
-                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
-                    imageDisplay: _this._map.getSize().join(',') + ',96',
-                    returnGeometry: true,
-                    tolerance: 15,
-                    f: 'pjson'
-                };
-                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
-                    var l = _a[_i];
-                    l.getPopupInfo(queryParams);
-                }
-            }
-            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
-            _this._passThroughLayerFeatureArray = [];
-            _this._currentPopupIndex = -1;
-            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                var featObj = layerFeatureObjectArray[i];
-                var props = featObj.feature.getProperties();
-                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
-                //skip if return was false
-                if (popupContentResponse === false) {
-                    //continue;
-                }
-                else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
-                    _this._passThroughLayerFeatureArray.push(featObj);
-                }
-                else {
-                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                }
-            }
-            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
-            _this._currentPopupIndex = -1;
-            var popupHtml = '<div class="ol-popup-nav">';
-            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
-            popupHtml += "<span>&nbsp;of&nbsp;</span>";
-            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
-            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
-            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
-            popupHtml += '</div>';
-            popupHtml += '<div class="ol-popup-inner">';
-            popupHtml += '</div>';
-            _this._$popupContent.html(popupHtml);
-            _this._$popupContent.find('.previous-popup').click(function () {
-                if (_this._popupContentLength == 1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == 0) {
-                    _this._currentPopupIndex = _this._popupContentLength - 1;
-                }
-                else {
-                    _this._currentPopupIndex--;
-                }
-                _this._triggerFeatSelect();
-            });
-            var nextPopup = _this._$popupContent.find('.next-popup');
-            nextPopup.click(function () {
-                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
-                    _this._currentPopupIndex = 0;
-                }
-                else {
-                    _this._currentPopupIndex++;
-                }
-                _this._triggerFeatSelect();
-            });
-            if (_this._popupContentLength > 0) {
-                nextPopup.trigger('click');
-                _this._popupOverlay.setPosition(_this._popupCoordinate);
-                _this._$popupContent.scrollTop(0);
-                _this._popupOpen = true;
-            }
-        });
-        //change mouse cursor when over marker
-        this._map.on('pointermove', function (evt) {
-            if (evt['dragging']) {
-                return;
-            }
-            var pixel = _this.map.getEventPixel(evt['originalEvent']);
-            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
-                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
-                    var olLayer = _a[_i];
-                    if (lyrCandidate == olLayer) {
-                        return true;
-                    }
-                }
-                return false;
-            });
-            var mapElement = _this.map.getTargetElement();
-            mapElement.style.cursor = hit ? 'pointer' : '';
-        });
-        return true;
-    };
-    /**
-     * helper to select features
-     * @private
-     */
-    MapPopupCls.prototype._triggerFeatSelect = function () {
-        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-        this.clearSelection();
-        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-        $layerNameSpan.html(lyrFeatObj.layerName);
-        $innerPopup.html(lyrFeatObj.popupContent);
-        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f(this._$popupContent);
-        }
-    };
-    /**
-     *
-     * @param feature - the ol feature
-     * @param {LayerEsriMapServer} lyr - the map server layer
-     * @param {string} popupContent - popup content
-     * @param {string} esriName - esri layer name
-     */
-    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
-        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
-        featLayerObject.popupContent = popupContent;
-        this._passThroughLayerFeatureArray.push(featLayerObject);
-        this._popupContentLength++;
-        $('.popup-content-length').html(this._popupContentLength.toFixed());
-        if (!this._popupOpen) {
-            this._$popupContent.find('.next-popup').trigger('click');
-            this._popupOverlay.setPosition(this._popupCoordinate);
-            this._$popupContent.scrollTop(0);
-            this._popupOpen = true;
-        }
-    };
-    /**
-     *
-     * @param  pixel - the ol pixel
-     * @returns  feature layer properties
-     * @private
-     */
-    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
-        var _this = this;
-        var layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
-            }
-        });
-        return layerFeatureObjectArray;
-    };
-    MapPopupCls.prototype.closePopup = function () {
-        this._checkInit();
-        this._popupOpen = false;
-        this._popupOverlay.setPosition(undefined);
-        this._$popupCloser[0].blur();
-        this.clearSelection();
-        this._$popupContent.html('');
-        return false;
-    };
-    ;
-    /**
-     *
-     * @param chgFunction - popup change function
-     */
-    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
-        this._popupChangedFunctions.push(chgFunction);
-    };
-    /**
-     *
-     * @param {LayerBase|*} lyr - the layer being acted on
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns  the new selection layer
-     * @private
-     */
-    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
-        this._checkInit();
-        selectionStyle = selectionStyle || {};
-        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-        selectionStyle.width = selectionStyle.width || 10;
-        var theStyle;
-        if (selectionStyle.olStyle) {
-            theStyle = selectionStyle.olStyle;
-        }
-        else {
-            theStyle = new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: selectionStyle.color,
-                    width: selectionStyle.width
-                }),
-                image: new ol.style.Circle({
-                    radius: 7,
-                    fill: new ol.style.Fill({ color: selectionStyle.color }),
-                    stroke: new ol.style.Stroke({ color: selectionStyle.color, width: 1 })
-                }),
-                fill: new ol.style.Fill({
-                    color: selectionStyle.color
-                })
-            });
-        }
-        var selectionLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: theStyle
-        });
-        selectionLayer.setZIndex(100);
-        this._selectionLayers.push(selectionLayer);
-        this._selectionLayerLookup[lyr.id] = selectionLayer;
-        this.map.addLayer(selectionLayer);
-        return selectionLayer;
-    };
-    /**
-     * Add popup to the map
-     * @param {LayerBase|*} lyr The layer that the popup with act on
-     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._arrPopupLayerIds.push(lyr.id);
-        this._arrPopupLayerNames.push(lyr.name);
-        this._arrPopupLayers.push(lyr);
-        this._arrPopupOlLayers.push(lyr.olLayer);
-        this._arrPopupContentFunction.push(popupContentFunction);
-        return selectionLayer;
-    };
-    ;
-    /**
-     *
-     * @param {LayerBase} lyr - layer
-     */
-    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
-        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
-        if (idx > -1) {
-            this._arrPopupLayerIds.splice(idx, 1);
-            this._arrPopupLayerNames.splice(idx, 1);
-            this._arrPopupLayers.splice(idx, 1);
-            this._arrPopupOlLayers.splice(idx, 1);
-            this._arrPopupContentFunction.splice(idx, 1);
-            this._selectionLayers.splice(idx, 1);
-            delete this._selectionLayerLookup[lyr.id];
-        }
-    };
-    /**
-     *
-     * @param {LayerEsriMapServer} lyr - map server layer
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._esriMapServiceLayers.push(lyr);
-        return selectionLayer;
-    };
-    MapPopupCls.prototype.clearSelection = function () {
-        this._checkInit();
-        for (var i = 0; i < this._selectionLayers.length; i++) {
-            this._selectionLayers[i].getSource().clear();
-        }
-        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f();
-        }
-    };
-    ;
-    /**
-     * Add a function to be called when the map is clicked but before any popups are implemented
-     * @param {function} func - the map click function
-     */
-    MapPopupCls.prototype.addMapClickFunction = function (func) {
-        this._mapClickFunctions.push(func);
-    };
-    return MapPopupCls;
-}(mapInteractionBase_1.default));
-exports.MapPopupCls = MapPopupCls;
-nm.MapPopupCls = MapPopupCls;
-exports.default = MapPopupCls;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param [options={}] config options
- * @param [options.divId=map] map div id
- * @param [options.center={}] center config object
- * @param [options.center.x=-10018378] center x, web mercator x or lon
- * @param [options.center.y=5574910] center y, web mercator y or lat
- * @param [options.zoom=7] zoom level
- * @param [options.minZoom=undefined] min zoom
- * @param [options.maxZoom=undefined] max zoom
- * @param [options.baseSwitcher=true] if add base map switcher
- * @param [options.fullScreen=false] if add base map switcher
- * @returns the ol map
- */
-function quickMapBase(options) {
-    if (options === void 0) { options = {}; }
-    options.divId = options.divId || 'map';
-    options.center = options.center || { x: -10018378, y: 5574910 };
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-    var $mapDiv = $('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-    var osmLayer = new ol.layer.Tile({ source: new ol.source.OSM() });
-    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-    if (options.baseSwitcher) {
-        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-        //  switcherContent += '"></div>';
-        //  $mapDiv.append(switcherContent);
-        //
-        // $mapDiv.find('.base-map-switcher').click(function() {
-        //      "use strict";
-        //      osmLayer.setVisible(!osmLayer.getVisible());
-        //      satLayer.setVisible(!satLayer.getVisible());
-        //
-        //      if (osmLayer.getVisible()){
-        //          $(this).css('background', aerialCss);
-        //      } else {
-        //          $(this).css('background', osmCss);
-        //      }
-        //  });
-    }
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new ol.geom.Point([options.center.x, options.center.y]);
-        new ol.proj.Projection({ code: "EPSG:4326" });
-        p.transform(new ol.proj.Projection({ code: "EPSG:4326" }), new ol.proj.Projection({ code: "EPSG:3857" }));
-        var coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-    var controls = ol.control.defaults({
-        attributionOptions: { collapsible: false }
-    });
-    var view = new ol.View({
-        center: [options.center.x, options.center.y],
-        zoom: options.zoom,
-        minZoom: options.minZoom,
-        maxZoom: options.maxZoom
-    });
-    var map = new ol.Map({
-        layers: [osmLayer],
-        target: options.divId,
-        controls: controls,
-        view: view
-    });
-    if (options.fullScreen) {
-        map.addControl(new ol.control.FullScreen({}));
-    }
-    return map;
-}
-exports.quickMapBase = quickMapBase;
-nm.quickMapBase = quickMapBase;
-exports.default = quickMapBase;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers.zoomResolutionConvert');
-var _zoomResLookup = [
-    156543.03392804097,
-    78271.51696402048,
-    39135.75848201024,
-    19567.87924100512,
-    9783.93962050256,
-    4891.96981025128,
-    2445.98490512564,
-    1222.99245256282,
-    611.49622628141,
-    305.748113140705,
-    152.8740565703525,
-    76.43702828517625,
-    38.21851414258813,
-    19.109257071294063,
-    9.554628535647032,
-    4.777314267823516,
-    2.388657133911758,
-    1.194328566955879,
-    0.5971642834779395,
-    0.29858214173896974,
-    0.14929107086948487,
-    0.07464553543474244,
-    0.03732276771737122,
-    0.01866138385868561,
-    0.009330691929342804,
-    0.004665345964671402,
-    0.002332672982335701,
-    0.0011663364911678506,
-    0.0005831682455839253 //28
-];
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-function zoomToResolution(zoomLevel) {
-    "use strict";
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        }
-        else {
-            console.log("invalid zoom level provided: " + zoomLevel);
-            return undefined;
-        }
-    }
-    else {
-        return undefined;
-    }
-}
-exports.zoomToResolution = zoomToResolution;
-nm.zoomToResolution = zoomToResolution;
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
-        if (resolution >= _zoomResLookup[i]) {
-            return i;
-        }
-    }
-    return 0;
-}
-exports.resolutionToZoom = resolutionToZoom;
-nm.resolutionToZoom = resolutionToZoom;
-
-
-/***/ }),
-/* 15 */,
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/16/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var mapMove_1 = __webpack_require__(6);
-var nm = provide_1.default('collections');
-var $ = __webpack_require__(1);
-var LayerGroup = (function () {
-    /**
-     *
-     * @param {object} [groupConfig={}] - group configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
-     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
-     * @param {LayerGroup} [parent=undefined] - the parent group
-     */
-    function LayerGroup(groupConfig, parent) {
-        this.groupLayers = [];
-        this.groupLayersLookup = {};
-        this.groupGroups = [];
-        this.groupGroupsLookup = {};
-        this.itemIdArray = [];
-        if (typeof groupConfig == 'undefined') {
-            this.parent = null;
-            this.groupId = 'root';
-            this.groupName = 'root';
-            this.allGroupLookup = { root: this };
-            this.allGroupArray = [this];
-            this.allLayerArray = [];
-            this.allLayerLookup = {};
-            this.layerParentLookup = {};
-            this.collapse = false;
-            this.addCheck = false;
-        }
-        else {
-            this.groupId = makeGuid_1.default();
-            this.parent = parent;
-            this.groupName = groupConfig.groupName;
-            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
-            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
-        }
-    }
-    /**
-     *
-     * @param {object} groupConfig - configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
-     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
-     * @param {Array<LayerGroup>} parents parent groups
-     * @returns {LayerGroup} the layer group just added
-     */
-    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
-        var parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        }
-        else {
-            parent = 'root';
-        }
-        /**
-         * @type {LayerGroup}
-         */
-        var parentGroup = this.allGroupLookup[parent];
-        var newGroup = new LayerGroup(groupConfig, parentGroup);
-        this.allGroupLookup[newGroup.groupId] = newGroup;
-        this.allGroupArray.push(newGroup);
-        parentGroup.groupGroups.push(newGroup);
-        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
-        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
-            console.log(newGroup.groupId);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newGroup.groupId);
-        return newGroup;
-    };
-    /**
-     *
-     * @param {LayerBase} newLayer the layer to be added
-     * @param {Array} parents array
-     */
-    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
-        var parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        }
-        else {
-            parent = 'root';
-        }
-        this.allLayerLookup[newLayer.id] = newLayer;
-        this.allLayerArray.push(newLayer);
-        /**
-         * @type {LayerGroup}
-         */
-        var parentGroup = this.allGroupLookup[parent];
-        parentGroup.groupLayers.push(newLayer);
-        parentGroup.groupLayersLookup[newLayer.id] = newLayer;
-        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
-            console.log(newLayer.id);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newLayer.id);
-        this.layerParentLookup[newLayer.id] = parentGroup;
-    };
-    LayerGroup.prototype.getLegendHtml = function (legendId, options) {
-        var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">";
-        legendHtml += "<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">" +
-            ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") +
-            "<span></span>" +
-            "</label></li>";
-        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
-        return legendHtml;
-    };
-    /**
-     * @param {Array} itemIds the items to process
-     * @param {LayerGroup} theGroup new group
-     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
-     * @static
-     * @returns {string} html string
-     */
-    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {
-        if (itemIds.length == 0) {
-            return '';
-        }
-        var theHml = '';
-        var itemId = itemIds[0];
-        if (theGroup.groupLayersLookup[itemId]) {
-            /**
-             * @type {LayerBase}
-             */
-            var lyr = theGroup.groupLayersLookup[itemId];
-            theHml += "<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">" + lyr.getLegendDiv() + '</li>';
-        }
-        else if (theGroup.groupGroupsLookup[itemId]) {
-            /**
-             * type {LayerGroup}
-             */
-            var otherGroup = theGroup.groupGroupsLookup[itemId];
-            theHml += "<li>";
-            theHml += "<div id=\"" + otherGroup.groupId + "-legend-layer-div\" " +
-                ("class=\"legend-layer-group  " + layerDivClasses.join(' ') + "\">");
-            if (otherGroup.addCheck) {
-                theHml += "<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">" +
-                    ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>");
-            }
-            else {
-                theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>";
-            }
-            theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander";
-            theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">";
-            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
-            theHml += '</span>';
-            //parents.push(groupId);
-            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
-            theHml += '</div>';
-            theHml += '</li>';
-        }
-        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
-    };
-    return LayerGroup;
-}());
-/**
- * a wrapper to make a legend
- */
-var LayerLegend = (function () {
-    /**
-     *
-     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
-     * @param {string} divId the div where the legend should be added
-     * @param {object} options for legend
-     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
-     * @param {string} [options.legendTitle=Legend] the legend title
-     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
-     */
-    function LayerLegend(legendItems, divId, options) {
-        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
-            var i = legendItems_1[_i];
-            if (typeof i == 'undefined') {
-                throw 'undefined item passed in array to legend constructor';
-            }
-        }
-        options = options || {};
-        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
-        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
-        options.layerDivClasses = options.layerDivClasses || [];
-        // if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove_1.default.checkInit();
-        }
-        this.$divElement = $('#' + divId);
-        this._legendItems = legendItems;
-        this.layerGroup = new LayerGroup();
-        this._buildTree(legendItems);
-        this.legendId = makeGuid_1.default();
-        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
-        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
-            var l = _b[_a];
-            l.applyCollapse();
-        }
-        var _this = this;
-        //// if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove_1.default.checkInit();
-            mapMove_1.default.addCallback(function (ext, zoom, evt) {
-                if (typeof evt == 'undefined' || evt == 'change:resolution') {
-                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
-                        var lyr = _a[_i];
-                        var $lyrLi = $('#' + lyr.id + '-layer-li');
-                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
-                            $lyrLi.addClass('layer-not-visible');
-                        }
-                        else {
-                            $lyrLi.removeClass('layer-not-visible');
-                        }
-                    }
-                }
-            }, this, 100, true, 'legend1');
-        }
-        // <editor-fold desc="add event listeners">
-        this.$divElement.find(".suppress-by-extent").change(function () {
-            var legendLayerLis = $('.legend-layer-li');
-            if (this.checked) {
-                legendLayerLis.removeClass('layer-force-show');
-            }
-            else {
-                legendLayerLis.addClass('layer-force-show');
-            }
-        });
-        this.$divElement.find('.legend-check').change(function () {
-            var lyrId = this.id.replace('-legend-layer-check', '');
-            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
-        });
-        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
-            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
-        });
-        this.$divElement.find('.layer-group-expander').click(function () {
-            var $this = $(this);
-            $this.removeClass('legend-layer-group-initial-collapse');
-            $this.siblings('ul').slideToggle();
-            if ($this.hasClass('legend-layer-group-collapsed')) {
-                $this.removeClass('legend-layer-group-collapsed');
-                $this.html('&#9660;');
-            }
-            else {
-                $this.addClass('legend-layer-group-collapsed');
-                $this.html('&#9654;');
-            }
-        });
-        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
-        // </editor-fold>
-    }
-    /**
-     * @param {Array} [legendItems=this._layerConfig] the legend items
-     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
-     * @private
-     */
-    LayerLegend.prototype._buildTree = function (legendItems, parents) {
-        if (legendItems.length == 0) {
-            return;
-        }
-        var oneItem = legendItems[0];
-        //reset the parent if the item is in the base array
-        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
-            parents = [];
-        }
-        if (typeof oneItem['groupName'] !== 'undefined') {
-            var groupItem = legendItems[0];
-            var newGroup = this.layerGroup.addGroup(groupItem, parents);
-            parents.push(newGroup.groupId);
-            this._buildTree(groupItem.items, parents);
-        }
-        else {
-            /**
-             * @type {LayerBase}
-             */
-            var layerItem = legendItems[0];
-            this.layerGroup.addLegendLayer(layerItem, parents);
-        }
-        this._buildTree(legendItems.slice(1), parents);
-    };
-    return LayerLegend;
-}());
-nm.LayerLegend = LayerLegend;
-exports.default = LayerLegend;
-
-
-/***/ }),
-/* 17 */,
-/* 18 */,
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBase_1 = __webpack_require__(8);
-var mapMove_1 = __webpack_require__(6);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The Vector layer base
- * @augments LayerBase
- * @abstract
- */
-var LayerBaseVector = (function (_super) {
-    __extends(LayerBaseVector, _super);
-    /**
-     * The base vector layer
-     * @param {string} url - pass an empty string to prevent default load and add from a json source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     */
-    function LayerBaseVector(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        options = options;
-        //prevent regular load if no url has been provided
-        if (_this.url.trim() == '') {
-            _this._loaded = true;
-        }
-        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
-        if (_this.visible) {
-            _this._autoLoad = true;
-        }
-        else {
-            _this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
-        }
-        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
-        if (options.mapMoveObj) {
-            _this._mapMove = options.mapMoveObj;
-        }
-        else {
-            _this._mapMove = _this._onDemand ? mapMove_1.default : undefined;
-        }
-        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
-            function () { return {}; };
-        if (_this._onDemand) {
-            _this._loaded = true;
-            _this._mapMoveParams = {};
-            _this._mapMove.checkInit();
-            _this._mapMove.addVectorLayer(_this);
-        }
-        _this._source = new ol.source.Vector();
-        _this._olLayer = new ol.layer.Vector({
-            source: _this._source,
-            visible: _this.visible,
-            style: _this.style,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution,
-            renderOrder: options.renderOrder
-        });
-        _this.olLayer.setZIndex(_this._zIndex);
-        _this._projectionMap = null;
-        _this._projection4326 = new ol.proj.Projection({ code: "EPSG:4326" });
-        return _this;
-    }
-    /**
-     * dummy to be overridden
-     * @param {object} featureCollection - geojson or esrijson object
-     */
-    LayerBaseVector.prototype.addFeatures = function (featureCollection) {
-        console.log('Layer vector base addFeatures is a placeholder and does nothing');
-    };
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {
-        if (this.minZoom !== undefined) {
-            if (zoom < this.minZoom) {
-                return false;
-            }
-        }
-        if (this.maxZoom !== undefined) {
-            if (zoom > this.maxZoom) {
-                return false;
-            }
-        }
-        return this.visible;
-    };
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        this._mapMoveParams = {};
-        $.extend(this._mapMoveParams, this.params);
-        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-    };
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    LayerBaseVector.prototype.mapMoveCallback = function (d) {
-        if (this.source) {
-            this._source.clear();
-        }
-    };
-    /**
-     * clear features in the layer
-     */
-    LayerBaseVector.prototype.clear = function () {
-        if (this._source) {
-            this._source.clear();
-        }
-    };
-    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
-        /**
-         * get on demand delay in miliseconds
-         */
-        get: function () {
-            return this._onDemandDelay;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
-        /**
-         * get if the layer is autoloaded
-         */
-        get: function () {
-            return this._autoLoad;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "style", {
-        /**
-         * get the style definition
-         */
-        get: function () {
-            return this._style;
-        },
-        /**
-         * set the style
-         * @param style - the style or function
-         */
-        set: function (style) {
-            this._style = style;
-            this.olLayer.setStyle(this._style);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
-        /**
-         * get the map CRS if it is defined by the map move object
-         */
-        get: function () {
-            return this.mapProj == null ? null : this.mapProj.getCode();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapProj", {
-        get: function () {
-            if (this._projectionMap != null) {
-                return this._projectionMap;
-            }
-            if (this._mapMove) {
-                this._projectionMap = this._mapMove.map.getView().getProjection();
-                return this._projectionMap;
-            }
-            else {
-                return null;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
-        /**
-         * get the map move object
-         * @type {MapMoveCls|*}
-         */
-        get: function () {
-            return this._mapMove;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
-        /**
-         * map move params
-         * @type {object}
-         */
-        get: function () {
-            return this._mapMoveParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "visible", {
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * Set the layer visibility
-         * @type {boolean}
-         * @override
-         */
-        set: function (visibility) {
-            _super.prototype.setVisible.call(this, visibility);
-            if (this._onDemand) {
-                this.mapMove.triggerLyrLoad(this);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "source", {
-        /**
-         * get the layer vector source
-         * @override
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "features", {
-        /**
-         * array of ol features
-         */
-        get: function () {
-            return this.source.getFeatures();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
-        /**
-         *
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBaseVector.prototype.setZIndex = function (newZ) {
-        this.olLayer.setZIndex(newZ);
-    };
-    return LayerBaseVector;
-}(LayerBase_1.LayerBase));
-exports.LayerBaseVector = LayerBaseVector;
-nm.LayerBaseVector = LayerBaseVector;
-exports.default = LayerBaseVector;
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 10/3/2016.
- */
-var ol = __webpack_require__(2);
-exports.proj4326 = new ol.proj.Projection({ code: 'EPSG:4326' });
-exports.proj3857 = new ol.proj.Projection({ code: 'EPSG:3857' });
-exports.proj3070 = new ol.proj.Projection({ code: 'EPSG:3070' });
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var colors = __webpack_require__(32);
-var provide_1 = __webpack_require__(0);
-var LayerItsInventory_1 = __webpack_require__(29);
-var nm = provide_1.default('collections');
-var itsConfig = [
-    {
-        name: 'Camera',
-        itsType: 'cctv',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'owner',
-            defaultName: 'WisDOT',
-            defaultIcon: 'cctv.png',
-            iconArray: [
-                ['City of Madison', 'Madison', 'cctv-mad.png']
-            ]
-        }
-    },
-    {
-        name: 'Message Signs',
-        itsType: 'DMS',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'dmsType',
-            defaultName: 'DMS',
-            defaultIcon: 'dms.png',
-            iconArray: [
-                ['pcms', 'PCMS', 'pcms.png']
-            ]
-        }
-    },
-    { name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false },
-    { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true },
-    { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false },
-    { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false },
-    { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false },
-    { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false },
-    { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false },
-    {
-        name: 'Loop Detectors',
-        itsType: 'loop',
-        legendCollapse: true,
-        minZoom: 14,
-        visible: false,
-        itsIconConfig: {
-            prop: 'dtctrType',
-            defaultName: 'Other',
-            defaultIcon: 'loopdetectorother.png',
-            iconArray: [
-                ['detector', 'Detector', 'loopdetector.png'],
-                ['long', 'Long', 'loopdetectorlong.png'],
-                ['zone', 'Zone', 'loopdetectorzone.png']
-            ]
-        },
-        onDemand: true
-    },
-    { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false },
-    { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true },
-    { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false },
-    { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false },
-    { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false },
-    { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true },
-    { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false },
-    {
-        name: 'Trench',
-        itsType: 'trench',
-        onDemand: true,
-        visible: false,
-        onDemandDelay: 500,
-        minZoom: 15,
-        legendCollapse: true,
-        itsLineConfig: {
-            prop: 'owner',
-            //defaultName: 'Other',
-            //defaultWidth: 7,
-            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-            lineArray: [
-                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],
-                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],
-                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],
-                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],
-                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],
-                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],
-                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],
-                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],
-                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]
-            ]
-        }
-    }
-];
-var ItsLayerCollection = (function () {
-    /**
-     * Create a collection of all ITS layers
-     * @param {ol.Map} theMap the openlayers map
-     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
-     *
-     * BLUE Bluetooth Detector - Bluetooth Detector
-     * CABINET Cabinets - The cabinets
-     * CCTV Camera - Traffic Cameras
-     * HUT Communication Hut - Communication Hut
-     * VAULT Communication Vault - The communication vaults
-     * HAR Highway Advisory Radio - Advisory Radios
-     * LIGHT Lighting - Lighting
-     * LOOP Loop Detectors - Loop Detectors
-     * DMS Message Board - Message Boards and Signs
-     * MICROWAVE Microwave Detector - Microwave Detectors
-     * PULL Pull Box - A pull box
-     * RWIS RWIS - Road weather information system
-     * GATE Ramp Gate - The ramp Gates
-     * METER Ramp Meter - The ramp meters
-     * SIGNAL Signal - Traffic Signal
-     * TOWER Tower - The towers
-     * TRENCH
-     */
-    function ItsLayerCollection(theMap, exclude) {
-        this._map = theMap;
-        this._layers = [];
-        exclude = typeof exclude == 'object' ? exclude : [];
-        for (var i = 0; i < itsConfig.length; i++) {
-            var lyrConfig = itsConfig[i];
-            var addLayer = true;
-            for (var j = 0; j < exclude.length; j++) {
-                if (exclude[j] == lyrConfig.itsType) {
-                    addLayer = false;
-                    break;
-                }
-            }
-            if (addLayer) {
-                var inventLyr = new LayerItsInventory_1.default(lyrConfig);
-                this._map.addLayer(inventLyr.olLayer);
-                this._layers.push(inventLyr);
-            }
-        }
-    }
-    Object.defineProperty(ItsLayerCollection.prototype, "layers", {
-        /**
-         * Return the array of layers in this collection
-         * @returns {Array<LayerItsInventory>} an array of layers
-         */
-        get: function () {
-            return this._layers;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return ItsLayerCollection;
-}());
-exports.ItsLayerCollection = ItsLayerCollection;
-nm.ItsLayerCollection = ItsLayerCollection;
-exports.default = ItsLayerCollection;
-
-
-/***/ }),
-/* 22 */,
-/* 23 */,
-/* 24 */,
-/* 25 */,
-/* 26 */,
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVector_1 = __webpack_require__(19);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var proj = __webpack_require__(20);
-var projections_1 = __webpack_require__(20);
-var nm = provide_1.default('layers');
-/**
- * The Vector GeoJson Layer
- * @augments LayerBaseVector
- */
-var LayerBaseVectorGeoJson = (function (_super) {
-    __extends(LayerBaseVectorGeoJson, _super);
-    /**
-     * @param {string|null} url - resource url, set to '' to make blank layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     */
-    function LayerBaseVectorGeoJson(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = this;
-        url = typeof url == 'string' ? url : '';
-        _this = _super.call(this, url, options) || this;
-        _this._geoJsonFormat = new ol.format.GeoJSON();
-        _this._transform = options.transform || {};
-        _this._transform.dataProjection = _this._transform.dataProjection || proj.proj4326;
-        _this._transform.featureProjection = _this._transform.featureProjection || projections_1.proj3857;
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
-        }
-        return _this;
-    }
-    /**
-     * add feature collection
-     * @param {object} featureCollection - as geojson object
-     */
-    LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) {
-        this.source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, { dataProjection: this._transform.dataProjection,
-            featureProjection: this._transform.featureProjection }));
-    };
-    /**
-     * trigger load features
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBaseVectorGeoJson.prototype._load = function () {
-        var _this = this;
-        if (_super.prototype._load.call(this)) {
-            return true;
-        }
-        $.get(this._url, this._params, function (d) {
-            _this.addFeatures(d);
-            _this.loadCallback(_this);
-        }, 'json').fail(function () {
-            this._loaded = false;
-        });
-        return false;
-    };
-    /**
-     * callback function on map move
-     * @param {object} d the json response
-     * @override
-     */
-    LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) {
-        _super.prototype.mapMoveCallback.call(this, d);
-        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, { featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection }));
-    };
-    return LayerBaseVectorGeoJson;
-}(LayerBaseVector_1.LayerBaseVector));
-exports.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-exports.default = LayerBaseVectorGeoJson;
-
-
-/***/ }),
-/* 28 */,
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/8/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVectorGeoJson_1 = __webpack_require__(27);
-var mapPopup_1 = __webpack_require__(4);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var projections_1 = __webpack_require__(20);
-var nm = provide_1.default('layers');
-function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-    //make sure one and only one configuration is defined;
-    var configCount = 0;
-    if (typeof itsIcon == 'string') {
-        configCount++;
-    }
-    if (typeof itsLineStyle == 'object') {
-        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
-        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
-        configCount++;
-    }
-    if (typeof itsIconConfig == 'object') {
-        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
-        if (typeof itsIconConfig.iconArray == 'undefined') {
-            itsIconConfig.iconArray = [];
-        }
-        configCount++;
-    }
-    if (typeof itsLineConfig == 'object') {
-        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
-        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
-        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
-        if (typeof itsLineConfig.lineArray == 'undefined') {
-            itsLineConfig.lineArray = [];
-        }
-        // set the width if not defined
-        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
-            if (itsLineConfig.lineArray[i].length == 3) {
-                itsLineConfig.lineArray[i].push(5);
-            }
-        }
-        configCount++;
-    }
-    if (configCount > 1) {
-        throw 'Only one style config can be defined';
-    }
-}
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {*} undefined, style, or style function
- */
-function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-    if (itsIcon) {
-        return new ol.style.Style({
-            image: new ol.style.Icon({
-                src: _iconUrlRoot + itsIcon,
-                crossOrigin: 'anonymous'
-            })
-        });
-    }
-    else if (itsLineStyle) {
-        return new ol.style.Style({
-            stroke: new ol.style.Stroke({
-                color: itsLineStyle.color,
-                width: itsLineStyle.width
-            })
-        });
-    }
-    else if (itsIconConfig) {
-        return function (feature) {
-            var symbolProp = feature.getProperties()[itsIconConfig.prop];
-            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
-            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
-                var thisProp = itsIconConfig.iconArray[i];
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    iconUrl = _iconUrlRoot + thisProp[2];
-                    break;
-                }
-            }
-            return [new ol.style.Style({
-                    image: new ol.style.Icon({
-                        src: iconUrl,
-                        crossOrigin: 'anonymous'
-                    })
-                })];
-        };
-    }
-    else if (itsLineConfig) {
-        return function (feature) {
-            var symbolProp = feature.getProperties()[itsLineConfig.prop];
-            var colr = itsLineConfig.defaultColor || 'red';
-            var width = itsLineConfig.defaultWidth || 5;
-            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
-                var thisProp = itsLineConfig.lineArray[i];
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    colr = thisProp[2];
-                    width = thisProp[3];
-                    break;
-                }
-            }
-            return [new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: colr,
-                        width: width
-                    })
-                })];
-        };
-    }
-    else {
-        return undefined;
-    }
-}
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {string} html to be added to the legend
- */
-function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-    var iconHeight = 17;
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-    if (itsIcon) {
-        return "<img src=\"" + (_iconUrlRoot + itsIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
-    }
-    else if (itsLineStyle) {
-        return "<hr style=\"height: " + itsLineStyle.width + "px; background-color: " + itsLineStyle.color + "\">";
-    }
-    else if (itsIconConfig) {
-        var outHtml = '';
-        outHtml += '<ul>';
-        for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) {
-            var a = _a[_i];
-            outHtml += "<li><span class=\"legend-layer-subitem\">" + a[1] + "</span><img src=\"" + (_iconUrlRoot + a[2]) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
-        }
-        outHtml += "<li><span class=\"legend-layer-subitem\">" + itsIconConfig.defaultName + "</span>" +
-            ("<img src=\"" + (_iconUrlRoot + itsIconConfig.defaultIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\"></li>");
-        outHtml += '</ul>';
-        return outHtml;
-    }
-    else if (itsLineConfig) {
-        var outHtml = '';
-        outHtml += '<ul>';
-        for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) {
-            var ls = _c[_b];
-            outHtml += "<li><span class=\"legend-layer-subitem\">" + ls[1] + "</span>" +
-                ("<hr style=\"height: " + ls[3] + "px; background-color: " + ls[2] + "\">");
-        }
-        outHtml += "<li><span class=\"legend-layer-subitem\">" + itsLineConfig.defaultName + "</span>" +
-            ("<hr style=\"height: " + itsLineConfig.defaultWidth + "px; background-color: " + itsLineConfig.defaultColor + "\"></li>");
-        outHtml += '</ul>';
-        return outHtml;
-    }
-    else {
-        return '';
-    }
-}
-/**
- * Its Layer class
- * @augments LayerBaseVectorGeoJson
- */
-var LayerItsInventory = (function (_super) {
-    __extends(LayerItsInventory, _super);
-    /**
-     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
-     *
-     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
-     *
-     * @param {object} [options.itsLineStyle=undefined] A single line style
-     * @param {string} options.itsLineStyle.color the line color as rgb or hex
-     * @param {number} [options.itsLineStyle.width=5] the line width
-     *
-     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
-     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
-     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
-     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
-     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
-     *
-     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
-     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
-     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
-     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
-     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
-     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
-     */
-    function LayerItsInventory(options) {
-        var _this = this;
-        if (typeof options.itsType !== 'string') {
-            throw 'its type must be defined';
-        }
-        options.transform = { dataProjection: projections_1.proj4326, featureProjection: projections_1.proj3857 };
-        var addToLegend = '';
-        // define a style with the helper function if it is not explicitly defined
-        if (typeof options.style == 'undefined') {
-            options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
-            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
-        }
-        options.params = typeof options.params == 'object' ? options.params : {};
-        $.extend(options.params, { format: 'JSON', resource: options.itsType });
-        _this = _super.call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options) || this;
-        //add any additional content to the legend
-        _this.addLegendContent(addToLegend);
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
-        if (options.addPopup) {
-            mapPopup_1.default.addVectorPopup(_this, function (props) {
-                return "<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=" + props['featureGuid'] + "\" " +
-                    "height=\"250\" width=\"350\"></iframe>";
-            });
-        }
-        return _this;
-    }
-    /**
-     * callback to generate the parameters passed in the get request
-     * @callback makeGetParams
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
-        var lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);
-        lowerLeft.transform(this.mapProj, this._projection4326);
-        var lowerLeftCoordinates = lowerLeft.getCoordinates();
-        var upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);
-        upperRight.transform(this.mapProj, this._projection4326);
-        var upperRightCoordinates = upperRight.getCoordinates();
-        $.extend(this.mapMoveParams, {
-            L: lowerLeftCoordinates[0],
-            R: upperRightCoordinates[0],
-            B: lowerLeftCoordinates[1],
-            T: upperRightCoordinates[1]
-        });
-    };
-    return LayerItsInventory;
-}(LayerBaseVectorGeoJson_1.default));
-nm.LayerItsInventory = LayerItsInventory;
-exports.default = LayerItsInventory;
-
-
-/***/ }),
-/* 30 */,
-/* 31 */,
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 11/3/2015.
- */
-var provide_1 = __webpack_require__(0);
-var chk = __webpack_require__(9);
-var nm = provide_1.default('util.colors');
-/**
- * helper function to convert to hex
- * @param {number|string} x - the number to convert to hex
- * @returns {string} number as hex
- * @private
- */
-function _hex(x) {
-    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
-    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
-}
-/**
- * converts an RGB string to hex
- * @param {string} rgb - rgb color
- * @returns {string} rbg as hex
- */
-function rgb2hex(rgb) {
-    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
-    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
-}
-exports.rgb2hex = rgb2hex;
-nm.rgb2hex = rgb2hex;
-/**
- * Convert hex string to RGB or RGBA string
- * @param {string} hexString - hex color string
- * @param {number} [alphaVal=undefined] Alpha value
- * @returns {string} - rgb or rgba color
- */
-function hexAlphaToRgbOrRgba(hexString, alphaVal) {
-    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
-    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
-    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
-    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
-    if (alphaVal) {
-        return "rgba(" + r + "," + g + "," + b + "," + alphaVal + ")";
-    }
-    else {
-        return "rgba(" + r + "," + g + "," + b + ")";
-    }
-}
-exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-/**
- * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
- * @param {string} rgb - rgb color
- * @param {number} alpha - alpha value 0 to 1
- * @returns {string} rgba color
- */
-function rgbToRgba(rgb, alpha) {
-    var pieces = rgb.split(',');
-    pieces[0] = pieces[0].replace('rgb', 'rgba');
-    pieces[2] = pieces[2].replace(')', '');
-    pieces.push(' ' + alpha.toFixed(1) + ')');
-    return pieces.join(',');
-}
-exports.rgbToRgba = rgbToRgba;
-nm.rgbToRgba = rgbToRgba;
-/**
- * @typedef {function} colorLookupByNumber
- * @param {number} num - the number to use to retrieve the color
- * @returns {string} rgb color
- */
-/**
- * Make a blue green red gradient
- * @param {number} minVal - minimum value
- * @param {number} maxVal - maximum value
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
-    if (typeof flipColors != "boolean") {
-        flipColors = false;
-    }
-    return function (theVal) {
-        var r, g, b;
-        var ratio;
-        if (chk.undefinedOrNull(theVal)) {
-            return 'rgb(100,100,100)';
-        }
-        var percent = (theVal - minVal) / (maxVal - minVal);
-        if (flipColors == true) {
-            percent = 1 - percent;
-        }
-        if (percent >= 1) {
-            r = 255;
-            g = 0;
-            b = 0;
-        }
-        else if (percent <= 0) {
-            r = 0;
-            g = 0;
-            b = 255;
-        }
-        else if (percent < .25) {
-            // green up, blue constant
-            r = 0;
-            g = Math.floor(255 * percent / 0.25);
-            b = 255;
-        }
-        else if (percent < 0.50) {
-            //blue down, green constant
-            ratio = (percent - 0.25) / 0.25;
-            r = 0;
-            g = 255;
-            b = 255 - Math.floor(255 * ratio);
-        }
-        else if (percent < 0.75) {
-            // red up, green constant
-            ratio = (percent - 0.5) / 0.25;
-            r = Math.floor(255 * ratio);
-            g = 255;
-            b = 0;
-        }
-        else {
-            // green down, red constant
-            ratio = (percent - 0.75) / 0.25;
-            r = 255;
-            g = 255 - Math.floor(255 * ratio);
-            b = 0;
-        }
-        r = r.toFixed();
-        g = g.toFixed();
-        b = b.toFixed();
-        return 'rgb(' + r + ',' + g + ',' + b + ')';
-    };
-}
-exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-/**
- * Create a function that will return colors based on a gradient
- * @param {number} median - median value
- * @param {number} stdDev - standard deviation
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
-    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
-    return function (theVal) {
-        var zScore;
-        if (theVal == null) {
-            zScore = null;
-        }
-        else {
-            zScore = (theVal - median) / stdDev;
-        }
-        return grd(zScore);
-    };
-}
-exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
-nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
-
-
-/***/ }),
-/* 33 */,
-/* 34 */,
-/* 35 */,
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/18/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var ItsLayerCollection_1 = __webpack_require__(21);
-var LayerLegend_1 = __webpack_require__(16);
-var quickMap_1 = __webpack_require__(7);
-var map = quickMap_1.default();
-window['map'] = map;
-var itsLayerCollection = new ItsLayerCollection_1.default(map);
-var layerArray = [
-    {
-        groupName: 'ITS Inventory Layers',
-        collapse: false,
-        addCheck: true,
-        items: itsLayerCollection.layers
-    }
-];
-var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
-console.log('it works');
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\itsMap.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
-/******/ ]);
+
+/******/ });
 //# sourceMappingURL=itsMap.js.map
\ No newline at end of file
diff --git a/test/serve/js/itsMap.js.map b/test/serve/js/itsMap.js.map
index af7584fcc86d94130f17cd2a4c10d31769eb7cd9..727a433288c15d4407065de720c11ea43d46cbfb 100644
--- a/test/serve/js/itsMap.js.map
+++ b/test/serve/js/itsMap.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83","webpack:///./src/util/provide.ts?5c82","webpack:///external \"$\"?57aa","webpack:///external \"ol\"?81ed","webpack:///./src/util/makeGuid.ts?e80e","webpack:///./src/olHelpers/mapPopup.ts?5d6c","webpack:///./src/olHelpers/mapInteractionBase.ts?f419","webpack:///./src/olHelpers/mapMove.ts?6a2b","webpack:///./src/olHelpers/quickMap.ts?1069","webpack:///./src/layers/LayerBase.ts?bf94","webpack:///./src/util/checkDefined.ts?bcd7","webpack:///./src/olHelpers/mapMoveCls.ts?cd45","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7","webpack:///./src/olHelpers/quickMapBase.ts?fb65","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b","webpack:///./src/collections/LayerLegend.ts","webpack:///./src/layers/LayerBaseVector.ts?c105","webpack:///./src/olHelpers/projections.ts","webpack:///./src/collections/ItsLayerCollection.ts","webpack:///./src/layers/LayerBaseVectorGeoJson.ts","webpack:///./src/layers/LayerItsInventory.ts","webpack:///./src/util/colors.ts","webpack:///./test/demo/itsMap.ts"],"names":[],"mappings":"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","file":"itsMap.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 36);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","module.exports = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 2\n// module chunks = 0 1 2 3","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/makeGuid.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopup.ts","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapInteractionBase.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMove.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nimport ol = require('custom-ol');\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): ol.Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMap.ts","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport makeGuid from '../util/makeGuid';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: ol.source.Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: ol.layer.Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBase.ts","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/checkDefined.ts","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = functionId;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMoveCls.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: ol.Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: ol.Coordinate;\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: Object;\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupLayerNames: Array<string>;\r\n    private _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return ol.easing.inAndOut(n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector, selectionStyle: {color?: string, width?: number, olStyle?: ol.style.Style}): ol.layer.Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: ol.style.Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopupCls.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): ol.Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    const controls = ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }\r\n    );\r\n\r\n    const view = new ol.View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer],\r\n        target: options.divId,\r\n        controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMapBase.ts","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/zoomResolutionConvert.ts","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: any;\r\n    addCheck: any;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?, parent?) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n    getLegendHtml(legendId, options) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    $divElement: any;\r\n    _legendItems: any;\r\n    layerGroup: any;\r\n    legendId: any;\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems, divId, options) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems, parents?) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/LayerLegend.ts","import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n    /**\r\n     *\r\n     * @param lyr\r\n     * @param extent\r\n     * @param zoomLevel\r\n     */\r\n    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n    autoLoad?: boolean;\r\n    style?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    onDemand?: boolean;\r\n    onDemandDelay?: number;\r\n    mapMoveMakeGetParams?: makeMapMoveParams;\r\n    mapMoveObj?: MapMoveCls;\r\n    renderOrder?: (a: ol.Feature, b: ol.Feature) => number;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n    _olLayer: ol.layer.Vector;\r\n    _source: ol.source.Vector;\r\n    _style: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    _autoLoad: boolean;\r\n    _onDemand: boolean;\r\n    _onDemandDelay: number;\r\n    _mapMoveMakeGetParams: makeMapMoveParams;\r\n    _mapMoveParams: any;\r\n    _mapMove: MapMoveCls;\r\n    _projectionMap: ol.proj.Projection;\r\n    _projection4326: ol.proj.Projection;\r\n\r\n\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorOptions = {}) {\r\n        super(url, options);\r\n\r\n        options = options as LayerBaseVectorOptions;\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj) {\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () {return {};};\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new ol.source.Vector();\r\n\r\n\r\n        this._olLayer = new ol.layer.Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                renderOrder: options.renderOrder\r\n            }\r\n        );\r\n\r\n        this.olLayer.setZIndex(this._zIndex);\r\n\r\n\r\n        this._projectionMap = null;\r\n        this._projection4326 = new ol.proj.Projection({code: \"EPSG:4326\"});\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     */\r\n    get onDemandDelay(): number {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     */\r\n    get autoLoad(): boolean {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     */\r\n    get style(): ol.StyleFunction|Array<ol.style.Style>|ol.style.Style {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param style - the style or function\r\n     */\r\n    set style(style: ol.StyleFunction|Array<ol.style.Style>|ol.style.Style) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style as ol.style.Style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     */\r\n    get mapCrs(): string {\r\n        return this.mapProj == null ? null : this.mapProj.getCode();\r\n    }\r\n\r\n    get mapProj(): ol.proj.Projection{\r\n        if (this._projectionMap != null){\r\n            return this._projectionMap;\r\n        }\r\n\r\n        if (this._mapMove) {\r\n            this._projectionMap = this._mapMove.map.getView().getProjection();\r\n            return this._projectionMap;\r\n        } else {\r\n            return null;\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove(): MapMoveCls {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n    get visible(): boolean{\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.setVisible(visibility);\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     */\r\n    get source(): ol.source.Vector {\r\n        return this.getSource() as ol.source.Vector;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     */\r\n    get features(): Array<ol.Feature> {\r\n        return this.source.getFeatures();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    get olLayer(): ol.layer.Vector {\r\n        return super.getOlLayer() as ol.layer.Vector;\r\n    }\r\n\r\n    protected setZIndex(newZ: number) {\r\n        this.olLayer.setZIndex(newZ);\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBaseVector.ts","/**\r\n * Created by gavorhes on 10/3/2016.\r\n */\r\nimport ol = require('custom-ol');\r\n\r\n\r\nexport const proj4326 = new ol.proj.Projection({code: 'EPSG:4326'});\r\nexport const proj3857 = new ol.proj.Projection({code: 'EPSG:3857'});\r\nexport const proj3070 = new ol.proj.Projection({code: 'EPSG:3070'});\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/projections.ts","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            //defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n\r\n\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n    _map: ol.Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap: ol.Map, exclude?: Array<string>) {\r\n\r\n        this._map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers() {\r\n        return this._layers;\r\n    }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/ItsLayerCollection.ts","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nimport {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nimport * as proj from '../olHelpers/projections';\r\nimport {proj3857} from \"../olHelpers/projections\";\r\n\r\nlet nm = provide('layers');\r\n\r\nexport interface crsTransform {\r\n    dataProjection?: ol.proj.Projection;\r\n    featureProjection?: ol.proj.Projection;\r\n}\r\n\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions {\r\n    transform?: crsTransform;\r\n    mapMoveObj?: MapMoveCls;\r\n}\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorGeoJson extends LayerBaseVector {\r\n    _geoJsonFormat: ol.format.GeoJSON;\r\n    _transform: crsTransform;\r\n\r\n    /**\r\n     * @param {string|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url?: string, options: LayerBaseVectorGeoJsonOptions = {}) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new ol.format.GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || proj.proj4326;\r\n        this._transform.featureProjection = this._transform.featureProjection || proj3857;\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection: any) {\r\n        this.source.addFeatures(\r\n            this._geoJsonFormat.readFeatures(featureCollection,\r\n                {dataProjection: this._transform.dataProjection,\r\n                    featureProjection: this._transform.featureProjection}\r\n                )\r\n        );\r\n    }\r\n\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d,\r\n            {featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection}));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBaseVectorGeoJson.ts","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nimport {proj4326, proj3857} from '../olHelpers/projections'\r\n\r\nlet nm = provide('layers');\r\n\r\n\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) : ol.style.Style|Array<ol.style.Style>|ol.StyleFunction{\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new ol.style.Style({\r\n            image: new ol.style.Icon(\r\n                {\r\n                    src: _iconUrlRoot + itsIcon,\r\n                    crossOrigin: 'anonymous'\r\n                }\r\n            )\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new ol.style.Style({\r\n            stroke: new ol.style.Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature: ol.Feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                image: new ol.style.Icon(\r\n                    {\r\n                        src: iconUrl,\r\n                        crossOrigin: 'anonymous'\r\n                    }\r\n                )\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature: ol.Feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {string} html to be added to the legend\r\n */\r\nfunction defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nclass LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        options.transform = {dataProjection: proj4326, featureProjection: proj3857};\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('http://transportal.cee.wisc.edu/its/inventory/', options);\r\n\r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props) {\r\n                return `<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapProj, this._projection4326);\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapProj, this._projection4326);\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerItsInventory.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x) {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb) {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb, alpha) {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal) {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal) {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/colors.ts","/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport ItsLayerCollection from '../../src/collections/ItsLayerCollection';\r\nimport LayerLegend from '../../src/collections/LayerLegend';\r\nimport quickMap from '../../src/olHelpers/quickMap';\r\n\r\nlet map = quickMap();\r\n\r\nwindow['map'] = map;\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\nconsole.log('it works');\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/itsMap.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8****"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"itsMap.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/my_little_test.js b/test/serve/js/my_little_test.js
index 54cb1f7424dcf28f757acbae474a0a5c7083c29c..bfe3c5d6f24b9016683bb172780f88e220b7252e 100644
--- a/test/serve/js/my_little_test.js
+++ b/test/serve/js/my_little_test.js
@@ -63,414 +63,15 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 37);
+/******/ 	return __webpack_require__(__webpack_require__.s = 4);
 /******/ })
 /************************************************************************/
 /******/ ({
 
-/***/ 0:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-
-/***/ 1:
+/***/ 4:
 /***/ (function(module, exports) {
 
-module.exports = $;
-
-/***/ }),
-
-/***/ 17:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var range_change_1 = __webpack_require__(18);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('domUtil');
-/**
- * @callback mediaCallback
- * @param {number} tm
- */
-function timeToLocalDateString(tm) {
-    "use strict";
-    var d = new Date(tm);
-    var p1 = d.toLocaleTimeString().split(' ');
-    var p2 = p1[0].split(':');
-    p2 = p2.slice(0, 2);
-    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
-}
-var MediaControl = (function () {
-    /**
-     *
-     * @param element
-     * @param changeFunc
-     * @param mediaConfig
-     */
-    function MediaControl(element, changeFunc, mediaConfig) {
-        if (changeFunc === void 0) { changeFunc = function () { return; }; }
-        if (mediaConfig === void 0) { mediaConfig = {}; }
-        var _this = this;
-        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;
-        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;
-        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;
-        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;
-        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;
-        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;
-        if (typeof element == 'string') {
-            this._container = $('#' + element);
-        }
-        else if (typeof element['style'] !== 'undefined') {
-            this._container = $(element);
-        }
-        else {
-            this._container = element;
-        }
-        this._container.addClass('media-control-container');
-        this._playInterval = mediaConfig.playInterval;
-        this._changeFunc = changeFunc;
-        this._showAsDate = mediaConfig.showAsDate;
-        this._currentValue = undefined;
-        this._min = undefined;
-        this._max = undefined;
-        this._step = undefined;
-        this._playing = false;
-        var htmlStr = '<span class="media-player-button media-back"></span>' +
-            '<span class="media-player-button media-play"></span>' +
-            '<span class="media-player-button media-pause media-disabled"></span>' +
-            '<span class="media-player-button media-stop media-disabled" ></span>' +
-            '<span class="media-player-button media-ahead"></span>' +
-            "<input type=\"range\">" +
-            "<div class=\"media-control-value-label-container\">" +
-            "<span class=\"media-control-value-label-min\"></span>" +
-            "<span class=\"media-control-value-label-val\"></span>" +
-            "<span class=\"media-control-value-label-max\"></span>" +
-            "</div>";
-        this._container.append(htmlStr);
-        // let btnPause = this._container.find('.media-pause');
-        var btnPlay = this._container.find('.media-play');
-        this._$btnStop = this._container.find('.media-stop');
-        var btnAhead = this._container.find('.media-ahead');
-        var btnBack = this._container.find('.media-back');
-        this._$slider = this._container.find('input[type=range]');
-        this._$valLabelMin = this._container.find('.media-control-value-label-min');
-        this._$valLabelVal = this._container.find('.media-control-value-label-val');
-        this._$valLabelMax = this._container.find('.media-control-value-label-max');
-        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);
-        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);
-        var ___this = this;
-        btnPlay.click(function () {
-            var $this = $(this);
-            $this.addClass('media-disabled');
-            ___this._$btnStop.removeClass('media-disabled');
-            btnAhead.addClass('media-locked');
-            btnBack.addClass('media-locked');
-            ___this._$slider.prop('disabled', true);
-            ___this._playing = true;
-            ___this._interval = setInterval(function () {
-                ___this.currentValue += ___this._step;
-            }, ___this._playInterval);
-        });
-        this._$btnStop.click(function () {
-            clearInterval(___this._interval);
-            var $this = $(this);
-            $this.addClass('media-disabled');
-            btnPlay.removeClass('media-disabled');
-            btnAhead.removeClass('media-locked');
-            btnBack.removeClass('media-locked');
-            ___this._$slider.prop('disabled', false);
-            ___this._playing = false;
-        });
-        btnAhead.click(function () {
-            ___this.currentValue = ___this.currentValue + ___this._step;
-        });
-        btnBack.click(function () {
-            ___this.currentValue = ___this.currentValue - ___this._step;
-        });
-    }
-    MediaControl.prototype.stopPlaying = function () {
-        if (this._playing) {
-            this._$btnStop.trigger('click');
-        }
-    };
-    Object.defineProperty(MediaControl.prototype, "playing", {
-        get: function () {
-            return this._playing;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "min", {
-        get: function () {
-            return this._min;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "max", {
-        get: function () {
-            return this._max;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "step", {
-        get: function () {
-            return this._step;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "currentValue", {
-        get: function () {
-            return this._currentValue;
-        },
-        set: function (newValue) {
-            if (newValue > this._max) {
-                newValue = this._min;
-            }
-            else if (newValue < this._min) {
-                newValue = this._max;
-            }
-            this._currentValue = newValue;
-            this._$slider.val(this._currentValue.toFixed(2));
-            if (this._showAsDate) {
-                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            }
-            else {
-                this._$valLabelVal.html(this.currentValue.toString());
-            }
-            this._changeFunc(newValue);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * set min and max value with step
-     * @param {number} newMin the new min
-     * @param {number} newMax the new mas
-     * @param {number} [newValue=newMin] the value to set
-     * @param {number} [newStep=(newMax-newMin)/20] step value
-     */
-    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
-        this._min = newMin;
-        this._max = newMax;
-        newValue = typeof newValue == 'number' ? newValue : newMin;
-        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
-        this._currentValue = newValue;
-        this._step = newStep;
-        this._$slider.prop('min', this.min.toString());
-        this._$slider.prop('max', this.max.toString());
-        this._$slider.prop('step', this.step.toString());
-        this._$slider.val(this.currentValue.toString());
-        if (this._showAsDate) {
-            this._$valLabelMin.html(timeToLocalDateString(this._min));
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            this._$valLabelMax.html(timeToLocalDateString(this._max));
-        }
-        else {
-            this._$valLabelMin.html(this._min.toString());
-            this._$valLabelVal.html(this.currentValue.toString());
-            this._$valLabelMax.html(this._max.toString());
-        }
-    };
-    Object.defineProperty(MediaControl.prototype, "changeFunction", {
-        /**
-         *
-         * @param {mediaCallback} newFunc the callback on change
-         */
-        set: function (newFunc) {
-            this._changeFunc = newFunc;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return MediaControl;
-}());
-exports.MediaControl = MediaControl;
-nm.MediaControl = MediaControl;
-
-
-/***/ }),
-
-/***/ 18:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('domUtil');
-var mouseIn = false;
-var mouseDown = false;
-var timeout = null;
-var dragged = false;
-var lastVal;
-/**
- * Created by gavorhes on 11/2/2015.
- */
-function triggerCallback(callback, evt) {
-    "use strict";
-    var val = parseFloat(this.value);
-    var min = parseFloat(this.min);
-    var max = parseFloat(this.max);
-    var step = parseFloat(this.step);
-    if (max - val < step) {
-        val = max;
-    }
-    var percent = (val - min) / (max - min);
-    if (typeof lastVal == 'number' && val == lastVal) {
-        return;
-    }
-    lastVal = val;
-    callback(val, percent, evt);
-}
-/**
- * Add a variety of listeners for range inputs applied to a common callback
- * @param  $slider - jquery reference to the slider
- * @param {rangeChangeCallback} callback - the callback
- * @param {number} [changeTimeout=75] before the callback is called
- * @this {jQuery}
- * @returns {jQuery} the jQuery object
- */
-function rangeChange($slider, callback, changeTimeout) {
-    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
-    $slider.mouseenter(function () {
-        mouseIn = true;
-    });
-    $slider.mouseleave(function () {
-        mouseIn = false;
-        mouseDown = false;
-    });
-    $slider.mousedown(function () {
-        mouseDown = true;
-    });
-    $slider.mouseup(function () {
-        mouseDown = false;
-    });
-    $slider.mousemove(
-    /**
-     *
-     * @param {object} evt - event properties
-     * @this {HTMLElement}
-     */
-    function (evt) {
-        if (!(mouseIn && mouseDown)) {
-            return;
-        }
-        dragged = true;
-        if (lastVal == this['value']) {
-            return;
-        }
-        lastVal = this['value'];
-        if (timeout != null) {
-            clearTimeout(timeout);
-        }
-        var _this = this;
-        timeout = setTimeout(function () {
-            triggerCallback.call(_this, callback, evt);
-            timeout = null;
-        }, changeTimeout);
-    });
-    $slider.keyup(
-    /**
-     *
-     * @param {object} evt - event properties
-     */
-    function (evt) {
-        if (evt.keyCode == 37 || evt.keyCode == 39) {
-            triggerCallback.call(this, callback, evt);
-        }
-    });
-    $slider.change(function (evt) {
-        if (dragged) {
-            dragged = false;
-            return;
-        }
-        triggerCallback.call(this, callback, evt);
-    });
-    return this;
-}
-exports.rangeChange = rangeChange;
-nm.rangeChange = rangeChange;
-
-
-/***/ }),
-
-/***/ 37:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-// let g = new
-var media_control_1 = __webpack_require__(17);
-//
-//
-console.log('eat this fish');
-console.log('eat this fish');
-console.log('eat this bird');
-//
-// let g = new ol3.source.Vector();
-//
-// console.log(olx);
-console.log('i am here5');
-function me(eat) {
-    if (eat === void 0) { eat = 1; }
-    console.log(eat, 'one');
-}
-me(1);
-var control = new media_control_1.MediaControl('map');
-//
-//
-// console.log(ol3);
-//
-//
-// console.log(definedAndNotNull("fish"));
-// console.log(definedAndNotNull("fish"));
-// console.log(definedAndNotNull("fish"));
-// console.log(definedAndNotNull("fish"));
-// console.log(definedAndNotNull("fish"));
-// console.log('here');
-//
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\my_little_test.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
 
diff --git a/test/serve/js/my_little_test.js.map b/test/serve/js/my_little_test.js.map
index eeb8aa8980c7f5844c2ae117446c16cffb75e2f5..f2f4670065dbc1ae0871e08ce424508799fe4df6 100644
--- a/test/serve/js/my_little_test.js.map
+++ b/test/serve/js/my_little_test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83***","webpack:///./src/util/provide.ts?5c82***","webpack:///external \"$\"?57aa***","webpack:///./src/domUtil/media-control.ts?660c","webpack:///./src/domUtil/range-change.ts?b7cd","webpack:///./test/demo/my_little_test.ts"],"names":[],"mappings":"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","file":"my_little_test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 37);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('domUtil');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm) {\r\n    \"use strict\";\r\n    let d = new Date(tm);\r\n    let p1 = d.toLocaleTimeString().split(' ');\r\n    let p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\nexport interface changeFunction{\r\n    (newVal?: number): void;\r\n}\r\n\r\nexport interface mediaRangeConfig{\r\n    min?: number;\r\n    max?: number;\r\n    val?: number;\r\n    step?: number;\r\n    playInterval?: number;\r\n    showAsDate?: boolean;\r\n}\r\n\r\n\r\n\r\nexport class MediaControl {\r\n    _container: JQuery;\r\n    _min: number;\r\n    _max: number;\r\n    _playInterval: number;\r\n    _step: number;\r\n    _currentValue: number;\r\n\r\n    _playing: boolean;\r\n\r\n    _$btnStop: JQuery;\r\n    _$slider: JQuery;\r\n    _$valLabelVal: JQuery;\r\n    _$valLabelMin: JQuery;\r\n    _$valLabelMax: JQuery;\r\n    _interval: number;\r\n    _showAsDate: boolean;\r\n\r\n    _changeFunc: changeFunction;\r\n\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    constructor(\r\n        element: JQuery|HTMLElement|string,\r\n        changeFunc: changeFunction = (): void => {return;},\r\n        mediaConfig: mediaRangeConfig = {}) {\r\n\r\n        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;\r\n        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;\r\n        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;\r\n        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;\r\n        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;\r\n        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;\r\n\r\n        if (typeof  element == 'string'){\r\n            this._container = $('#' + element);\r\n        }\r\n        else if (typeof element['style'] !== 'undefined'){\r\n            this._container = $(element);\r\n        } else {\r\n            this._container = element as JQuery;\r\n        }\r\n\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n\r\n        this._showAsDate = mediaConfig.showAsDate;\r\n\r\n        this._currentValue = undefined;\r\n        this._min = undefined;\r\n        this._max = undefined;\r\n        this._step = undefined;\r\n        this._playing = false;\r\n\r\n        let htmlStr =\r\n            '<span class=\"media-player-button media-back\"></span>' +\r\n            '<span class=\"media-player-button media-play\"></span>' +\r\n            '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n            '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n            '<span class=\"media-player-button media-ahead\"></span>' +\r\n            `<input type=\"range\">` +\r\n            `<div class=\"media-control-value-label-container\">` +\r\n            `<span class=\"media-control-value-label-min\"></span>` +\r\n            `<span class=\"media-control-value-label-val\"></span>` +\r\n            `<span class=\"media-control-value-label-max\"></span>` +\r\n            `</div>`;\r\n\r\n        this._container.append(htmlStr);\r\n\r\n        // let btnPause = this._container.find('.media-pause');\r\n        let btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        let btnAhead = this._container.find('.media-ahead');\r\n        let btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\r\n\r\n        this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n        this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n        this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n\r\n        rangeChange(this._$slider,(newVal) => { this.currentValue = newVal;}, 100);\r\n\r\n        let ___this = this;\r\n\r\n        btnPlay.click(function () {\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            ___this._$btnStop.removeClass('media-disabled');\r\n            btnAhead.addClass('media-locked');\r\n            btnBack.addClass('media-locked');\r\n            ___this._$slider.prop('disabled', true);\r\n            ___this._playing = true;\r\n\r\n            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            btnPlay.removeClass('media-disabled');\r\n            btnAhead.removeClass('media-locked');\r\n            btnBack.removeClass('media-locked');\r\n            ___this._$slider.prop('disabled', false);\r\n            ___this._playing = false;\r\n        });\r\n\r\n        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n\r\n    stopPlaying(){\r\n        if (this._playing){\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    }\r\n\r\n    get playing(){\r\n        return this._playing;\r\n    }\r\n\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    get step() {\r\n        return this._step;\r\n    }\r\n\r\n    get currentValue() {\r\n        return this._currentValue;\r\n    }\r\n\r\n    set currentValue(newValue) {\r\n        if (newValue > this._max) {\r\n            newValue = this._min;\r\n        } else if (newValue < this._min) {\r\n            newValue = this._max;\r\n        }\r\n        this._currentValue = newValue;\r\n        this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n        } else {\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n        }\r\n\r\n        this._changeFunc(newValue);\r\n    }\r\n\r\n    /**\r\n     * set min and max value with step\r\n     * @param {number} newMin the new min\r\n     * @param {number} newMax the new mas\r\n     * @param {number} [newValue=newMin] the value to set\r\n     * @param {number} [newStep=(newMax-newMin)/20] step value\r\n     */\r\n    setMinMaxValueStep(newMin, newMax, newValue, newStep) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;\r\n\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\r\n\r\n        this._$slider.prop('min', this.min.toString());\r\n        this._$slider.prop('max', this.max.toString());\r\n        this._$slider.prop('step', this.step.toString());\r\n        this._$slider.val(this.currentValue.toString());\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n        } else {\r\n            this._$valLabelMin.html(this._min.toString());\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n            this._$valLabelMax.html(this._max.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {mediaCallback} newFunc the callback on change\r\n     */\r\n    set changeFunction(newFunc: changeFunction) {\r\n        this._changeFunc = newFunc;\r\n    }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/media-control.ts","import provide from '../util/provide';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('domUtil');\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout = null;\r\nlet dragged = false;\r\nlet lastVal;\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n    /**\r\n     *\r\n     * @param newValue new value of the slider\r\n     * @param ratio ratio from low to high, 0 to 1\r\n     * @param evt the original event\r\n     */\r\n    (newValue: number, ratio: number, evt: Event): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt) {\r\n    \"use strict\";\r\n\r\n    let val = parseFloat(this.value);\r\n    let min = parseFloat(this.min);\r\n    let max = parseFloat(this.max);\r\n    let step = parseFloat(this.step);\r\n\r\n    if (max - val < step){\r\n        val = max;\r\n    }\r\n\r\n    let percent =  (val - min) / (max - min);\r\n\r\n    if (typeof lastVal == 'number' && val ==  lastVal){\r\n        return;\r\n    }\r\n    lastVal = val;\r\n    callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param  $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousemove(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         * @this {HTMLElement}\r\n         */\r\n        function (evt) {\r\n        if (!(mouseIn && mouseDown)) {\r\n            return;\r\n        }\r\n\r\n        dragged = true;\r\n\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n\r\n        }, changeTimeout);\r\n    });\r\n\r\n    $slider.keyup(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         */\r\n        function (evt) {\r\n        if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n            triggerCallback.call(this, callback, evt);\r\n        }\r\n    });\r\n\r\n    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n\r\n    return this;\r\n}\r\n\r\nnm.rangeChange = rangeChange;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/range-change.ts","import ol = require('custom-ol');\r\n// let g = new\r\n\r\n\r\n\r\n\r\nimport {MediaControl} from '../../src/domUtil/media-control'\r\n//\r\n//\r\n\r\n\r\nconsole.log('eat this fish');\r\nconsole.log('eat this fish');\r\nconsole.log('eat this bird');\r\n\r\n//\r\n// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\n\r\n\r\nconsole.log('i am here5');\r\n\r\n\r\n\r\nfunction me (eat: number = 1){\r\n    console.log(eat, 'one');\r\n}\r\n\r\nme(1);\r\n\r\nvar control = new MediaControl('map');\r\n\r\n//\r\n//\r\n// console.log(ol3);\r\n//\r\n//\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log('here');\r\n//\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/my_little_test.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8***"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"my_little_test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/range_media.js b/test/serve/js/range_media.js
index ef7d1032c8175bec58686f515dd042a576e18166..5784c08f8e72eaee7a3285a813301ae4e6715302 100644
--- a/test/serve/js/range_media.js
+++ b/test/serve/js/range_media.js
@@ -63,169 +63,15 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 38);
+/******/ 	return __webpack_require__(__webpack_require__.s = 5);
 /******/ })
 /************************************************************************/
 /******/ ({
 
-/***/ 0:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-
-/***/ 1:
+/***/ 5:
 /***/ (function(module, exports) {
 
-module.exports = $;
-
-/***/ }),
-
-/***/ 23:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var $ = __webpack_require__(1);
-__webpack_require__(1);
-var nm = provide_1.default('domUtil');
-var DayRange = (function () {
-    /**
-     * constructor for the date range
-     * @param {number} dayRange number of days
-     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
-     */
-    function DayRange(jQueryRef, dayRange) {
-        this._workingDayRange = dayRange - 1;
-        var pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
-            '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
-            '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' +
-            '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
-        jQueryRef.append(pickerHtml);
-        this._$startDate = $('#start-date');
-        this._$endDate = $('#end-date');
-        this._$startDate.datepicker();
-        this._$endDate.datepicker();
-        this._startDate = null;
-        this._endDate = null;
-        var dte1 = new Date();
-        dte1.setHours(0, 0, 0, 0);
-        var dte2 = new Date(dte1.getTime());
-        dte2.setDate(dte2.getDate() + dayRange);
-        dte2.setHours(23, 59, 59, 0);
-        this._maxDateRange = dte2.getTime() - dte1.getTime();
-        var _this = this;
-        //add event listeners
-        this._$startDate.change(function () {
-            _this.startDate = this.value;
-        });
-        this._$endDate.change(function () {
-            _this.endDate = this.value;
-        });
-        // initialize
-        this.endDate = new Date();
-    }
-    Object.defineProperty(DayRange.prototype, "startDate", {
-        get: function () {
-            return this._startDate;
-        },
-        /**
-         *
-         * @param val
-         */
-        set: function (val) {
-            if (typeof val == 'string') {
-                val = new Date(val);
-            }
-            this._startDate = val;
-            this._startDate.setHours(0, 0, 0, 0);
-            this._$startDate.val(this._startDate.toLocaleDateString());
-            if (this.endDate == null ||
-                this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||
-                this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._startDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
-                this.endDate = new Date(tmpDate.getTime());
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(DayRange.prototype, "endDate", {
-        get: function () {
-            return this._endDate;
-        },
-        set: function (val) {
-            if (typeof val == 'string') {
-                val = new Date(val);
-            }
-            this._endDate = val;
-            this._endDate.setHours(23, 59, 59, 0);
-            this._$endDate.val(this._endDate.toLocaleDateString());
-            if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._endDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
-                this.startDate = new Date(tmpDate.getTime());
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return DayRange;
-}());
-exports.DayRange = DayRange;
-nm.DayRange = DayRange;
-exports.default = DayRange;
-
-
-/***/ }),
-
-/***/ 38:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 10/10/2016.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var day_range_1 = __webpack_require__(23);
-var $ = __webpack_require__(1);
-var dayRange = new day_range_1.DayRange($('#day-range'), 10);
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\range_media.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
 
diff --git a/test/serve/js/range_media.js.map b/test/serve/js/range_media.js.map
index 0f587fe1b60584a05a6a0d46330843ea33ab0be2..f5c96e78c1abba7cd3e03a6547da2233df06c1da 100644
--- a/test/serve/js/range_media.js.map
+++ b/test/serve/js/range_media.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83****","webpack:///./src/util/provide.ts?5c82****","webpack:///external \"$\"?57aa****","webpack:///./src/domUtil/day-range.ts","webpack:///./test/demo/range_media.ts"],"names":[],"mappings":"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","file":"range_media.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 38);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","import provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\n\r\nlet nm = provide('domUtil');\r\n\r\nexport class DayRange {\r\n    _workingDayRange: number;\r\n    _$startDate: JQuery;\r\n    _$endDate: JQuery;\r\n    _maxDateRange: number;\r\n    _startDate: Date;\r\n    _endDate: Date;\r\n\r\n    /**\r\n     * constructor for the date range\r\n     * @param {number} dayRange number of days\r\n     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element\r\n     */\r\n    constructor(jQueryRef: JQuery, dayRange: number) {\r\n        this._workingDayRange = dayRange - 1;\r\n\r\n        let pickerHtml = '<label for=\"start-date\" style=\"width: 78px; display: inline-block; margin:5px;\">Start Date</label>' +\r\n            '<input type=\"text\" readonly id=\"start-date\" class=\"date-pick\"  style=\"width: 90px;\">' +\r\n            '<br><label for=\"end-date\" style=\"width: 78px; display: inline-block;  margin:5px;\">End Date</label>' +\r\n            '<input type=\"text\" readonly id=\"end-date\" class=\"date-pick\" style=\"width: 90px;\">';\r\n\r\n        jQueryRef.append(pickerHtml);\r\n\r\n        this._$startDate = $('#start-date');\r\n        this._$endDate = $('#end-date');\r\n\r\n        this._$startDate.datepicker();\r\n        this._$endDate.datepicker();\r\n\r\n        this._startDate = null;\r\n        this._endDate = null;\r\n\r\n        let dte1 = new Date();\r\n        dte1.setHours(0, 0, 0, 0);\r\n        let dte2 = new Date(dte1.getTime());\r\n        dte2.setDate(dte2.getDate() + dayRange);\r\n        dte2.setHours(23, 59, 59, 0);\r\n        this._maxDateRange = dte2.getTime() - dte1.getTime();\r\n\r\n        let _this = this;\r\n\r\n        //add event listeners\r\n        this._$startDate.change(function () {\r\n            _this.startDate = this.value;\r\n        });\r\n\r\n        this._$endDate.change(function () {\r\n            _this.endDate = this.value;\r\n        });\r\n\r\n        // initialize\r\n        this.endDate = new Date();\r\n    }\r\n\r\n    get startDate(): Date {\r\n        return this._startDate;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param val\r\n     */\r\n    set startDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._startDate = val;\r\n        this._startDate.setHours(0, 0, 0, 0);\r\n        this._$startDate.val(this._startDate.toLocaleDateString());\r\n\r\n        if (\r\n            this.endDate == null ||\r\n            this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||\r\n            this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._startDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);\r\n            this.endDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n\r\n    get endDate(): Date {\r\n        return this._endDate;\r\n    }\r\n\r\n\r\n    set endDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._endDate = val;\r\n        this._endDate.setHours(23, 59, 59, 0);\r\n        this._$endDate.val(this._endDate.toLocaleDateString());\r\n        if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._endDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);\r\n            this.startDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n}\r\n\r\nnm.DayRange = DayRange;\r\n\r\nexport default DayRange;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/day-range.ts","/**\r\n * Created by gavorhes on 10/10/2016.\r\n */\r\n\r\nimport {DayRange} from '../../src/domUtil/day-range';\r\nimport $ = require('jquery');\r\n\r\nlet dayRange = new DayRange($('#day-range'), 10);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/range_media.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8**"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"range_media.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/reacttst.js b/test/serve/js/reacttst.js
index 13d2628c08e8aa2e5fdf468a1377fa53981696ac..b50c5c3a3e6f911cb495857ea4106b1cf979bd1f 100644
--- a/test/serve/js/reacttst.js
+++ b/test/serve/js/reacttst.js
@@ -63,30 +63,15 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 39);
+/******/ 	return __webpack_require__(__webpack_require__.s = 6);
 /******/ })
 /************************************************************************/
 /******/ ({
 
-/***/ 39:
+/***/ 6:
 /***/ (function(module, exports) {
 
-/**
- * Created by gavorhes on 9/22/2016.
- */
-// import * as React from "react";
-// import * as ReactDOM from "react/lib/";
-//
-// import { Hello } from "../_scratch/Hello";
-//
-// console.log('I am in a tsx file for some reason');
-//
-// ReactDOM.render(
-//     <Hello compiler="TypeScript" framework="React" />,
-//     document.getElementById("example")
-// );
-//
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\reacttst.tsx.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
 
diff --git a/test/serve/js/reacttst.js.map b/test/serve/js/reacttst.js.map
index 86e14acfc0869f44515ebc07f97021c1b06aa910..a10ce4291e7226928e997875a04a9d5e917db7d5 100644
--- a/test/serve/js/reacttst.js.map
+++ b/test/serve/js/reacttst.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83******","webpack:///./test/demo/reacttst.tsx"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;AChEA;;GAEG;AAEH,kCAAkC;AAClC,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,qDAAqD;AACrD,EAAE;AACF,mBAAmB;AACnB,yDAAyD;AACzD,yCAAyC;AACzC,KAAK;AACL,EAAE","file":"reacttst.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 39);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\n// import * as React from \"react\";\r\n// import * as ReactDOM from \"react/lib/\";\r\n//\r\n// import { Hello } from \"../_scratch/Hello\";\r\n//\r\n// console.log('I am in a tsx file for some reason');\r\n//\r\n// ReactDOM.render(\r\n//     <Hello compiler=\"TypeScript\" framework=\"React\" />,\r\n//     document.getElementById(\"example\")\r\n// );\r\n//\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/reacttst.tsx"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8*"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"reacttst.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/simple_map.js b/test/serve/js/simple_map.js
index 8b9d2043d766af6a5178047eb4f7fc5ba3e86088..376c3d75141792601d0522cf6827dca12c05f61f 100644
--- a/test/serve/js/simple_map.js
+++ b/test/serve/js/simple_map.js
@@ -63,2437 +63,17 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 40);
+/******/ 	return __webpack_require__(__webpack_require__.s = 7);
 /******/ })
 /************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
+/******/ ({
 
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-/* 1 */
+/***/ 7:
 /***/ (function(module, exports) {
 
-module.exports = $;
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-module.exports = ol;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util');
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-        .replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
-        return v.toString(16);
-    });
-}
-nm.makeGuid = makeGuid;
-exports.default = makeGuid;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapPopupCls_1 = __webpack_require__(12);
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-exports.mapPopup = new mapPopupCls_1.default();
-exports.default = exports.mapPopup;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/8/2015.
- */
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers');
-/**
- * base interaction
- */
-var MapInteractionBase = (function () {
-    /**
-     * map interaction base
-     * @param subtype - the interaction subtype
-     */
-    function MapInteractionBase(subtype) {
-        this._map = null;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-    /**
-     * base initializer, returns true for already initialized
-     * @param theMap - the ol Map
-     * @returns true for already initialized
-     */
-    MapInteractionBase.prototype.init = function (theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-        }
-    };
-    Object.defineProperty(MapInteractionBase.prototype, "map", {
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-        get: function () {
-            return this._map;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-        get: function () {
-            return this._initialized;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    MapInteractionBase.prototype._checkInit = function () {
-        if (!this.initialized) {
-            var msg = this._subtype + " object not initialized";
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    };
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    MapInteractionBase.prototype.checkInit = function () {
-        this._checkInit();
-    };
-    return MapInteractionBase;
-}());
-exports.MapInteractionBase = MapInteractionBase;
-nm.MapInteractionBase = MapInteractionBase;
-exports.default = MapInteractionBase;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapMoveCls_1 = __webpack_require__(11);
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-exports.mapMove = new mapMoveCls_1.default();
-exports.default = exports.mapMove;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = __webpack_require__(13);
-var provide_1 = __webpack_require__(0);
-var mapMove_1 = __webpack_require__(6);
-var mapPopup_1 = __webpack_require__(4);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    if (options === void 0) { options = {}; }
-    var m = quickMapBase_1.quickMapBase(options);
-    mapMove_1.default.init(m);
-    mapPopup_1.default.init(m);
-    return m;
-}
-exports.quickMap = quickMap;
-nm.quickMap = quickMap;
-exports.default = quickMap;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var zoomResolutionConvert = __webpack_require__(14);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * The base layer class
- * @abstract
- */
-var LayerBase = (function () {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-    function LayerBase(url, options) {
-        if (options === void 0) { options = {}; }
-        options = options || {};
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-        this._params = typeof options.params == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-        this.id = options.id || makeGuid_1.default();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        }
-        else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        this._source = undefined;
-        /**
-         *
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
-        };
-        this._legendContent = '';
-        if (this._legendCheckbox) {
-            this._legendContent += "<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " " +
-                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
-            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        else {
-            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
-        }
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    LayerBase.prototype._load = function () {
-        if (this.loaded == true) {
-            return true;
-        }
-        else {
-            this._loaded = true;
-            return false;
-        }
-    };
-    /**
-     * Get the legend html, be sure to only add to the DOM once
-     * @returns {string} html for layer wrapped in a div
-     */
-    LayerBase.prototype.getLegendDiv = function () {
-        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
-    };
-    /**
-     *
-     * @param additionalContent - additional content to add to legend
-     * @private
-     */
-    LayerBase.prototype._addLegendContent = function (additionalContent) {
-        if (additionalContent === void 0) { additionalContent = ''; }
-        var addCollapse = additionalContent.indexOf('<ul>') > -1;
-        if (addCollapse) {
-            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-        }
-        this._legendContent += additionalContent;
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            this._$legendDiv.append(additionalContent);
-            this.applyCollapse();
-        }
-    };
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=] - additonal content to add
-     */
-    LayerBase.prototype.addLegendContent = function (additionalContent) {
-        this._addLegendContent(additionalContent);
-    };
-    LayerBase.prototype.applyCollapse = function () {
-        if (this._applyCollapseCalled) {
-            console.log('collapse already applied');
-            return undefined;
-        }
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
-        if (this._$legendDiv.length > 0) {
-            var $expander = this._$legendDiv.find('.legend-items-expander');
-            if ($expander.length > 0) {
-                this._applyCollapseCalled = true;
-                $expander.click(function () {
-                    var $this = $(this);
-                    $this.siblings('ul').slideToggle();
-                    if ($this.hasClass('legend-layer-group-collapsed')) {
-                        $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&#9660;');
-                    }
-                    else {
-                        $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&#9654;');
-                    }
-                });
-                if (this._legendCollapse) {
-                    $expander.trigger('click');
-                }
-            }
-        }
-    };
-    /**
-     * trick to refresh the layer
-     */
-    LayerBase.prototype.refresh = function () {
-        if (this.source) {
-            this.source.refresh();
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "id", {
-        get: function () {
-            return this._id;
-        },
-        set: function (newId) {
-            this._id = newId;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "animate", {
-        get: function () {
-            return this._animate;
-        },
-        set: function (animate) {
-            this._animate = animate;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "legendContent", {
-        /**
-         * get the legend content
-         * @type {string}
-         */
-        get: function () {
-            return this._legendContent;
-        },
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        set: function (newVal) {
-            this._legendContent = newVal;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "params", {
-        /**
-         * get the map get params
-         * @type {object}
-         */
-        get: function () {
-            return this._params;
-        },
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        set: function (newParams) {
-            this._params = newParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minResolution", {
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxResolution", {
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minZoom", {
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxZoom", {
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "url", {
-        /**
-         * get the url
-         * @type {string}
-         */
-        get: function () {
-            return this._url;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "visible", {
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * set the visibility
-         * @param visibility
-         */
-        set: function (visibility) {
-            this.setVisible(visibility);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setVisible = function (visibility) {
-        this._visible = visibility;
-        if (this.olLayer) {
-            this.olLayer.setVisible(this._visible);
-            if (visibility && !this._loaded) {
-                this._load();
-            }
-        }
-    };
-    Object.defineProperty(LayerBase.prototype, "opacity", {
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-        get: function () {
-            return this._opacity;
-        },
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        set: function (opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "name", {
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-        get: function () {
-            return this._name;
-        },
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        set: function (newName) {
-            this._name = newName;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "loaded", {
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-        get: function () {
-            return this._loaded;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "source", {
-        /**
-         * get the layer source
-         * @type {*}
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getSource = function () {
-        return this._source;
-    };
-    Object.defineProperty(LayerBase.prototype, "zIndex", {
-        /**
-         * get the z index
-         */
-        get: function () {
-            return this._zIndex;
-        },
-        /**
-         * set the z index
-         */
-        set: function (newZ) {
-            this._zIndex = newZ;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setZIndex = function (newZ) {
-    };
-    Object.defineProperty(LayerBase.prototype, "olLayer", {
-        /**
-         * the the ol layer
-         */
-        get: function () {
-            return this.getOlLayer();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getOlLayer = function () {
-        return this._olLayer;
-    };
-    return LayerBase;
-}());
-exports.LayerBase = LayerBase;
-nm.LayerBase = LayerBase;
-exports.default = LayerBase;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('util.checkDefined');
-/**
- * check if the input is undefined or null
- * @param input - input pointer
- * @returns true undefined or null
- */
-function undefinedOrNull(input) {
-    "use strict";
-    return (typeof input === 'undefined' || input === null);
-}
-exports.undefinedOrNull = undefinedOrNull;
-nm.undefinedOrNull = undefinedOrNull;
-/**
- * check if the input is defined and not null
- * @param input - input pointer
- * @returns true defined and not null
- */
-function definedAndNotNull(input) {
-    "use strict";
-    return !(undefinedOrNull(input));
-}
-exports.definedAndNotNull = definedAndNotNull;
-nm.definedAndNotNull = definedAndNotNull;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 12/7/2015.
- */
-var LayerBase_1 = __webpack_require__(8);
-var esriToOl = __webpack_require__(15);
-var mapPopup_1 = __webpack_require__(4);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('layers');
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-var LayerEsriMapServer = (function (_super) {
-    __extends(LayerEsriMapServer, _super);
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} [options] - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
-     */
-    function LayerEsriMapServer(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new ol.source.TileArcGISRest({
-            url: _this.url == '' ? undefined : _this.url,
-            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
-        });
-        _this._olLayer = new ol.layer.Tile({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
-        });
-        _this._olLayer.setZIndex(_this._zIndex);
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-        _this._esriFormat = new ol.format.EsriJSON();
-        _this._popupRequest = null;
-        _this.addLegendContent();
-        if (options.addPopup) {
-            mapPopup_1.default.addMapServicePopup(_this);
-        }
-        return _this;
-    }
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] !== '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'legend?f=pjson&callback=?';
-        $.get(urlCopy, {}, function (d) {
-            var newHtml = esriToOl.makeMapServiceLegend(d);
-            _super.prototype.addLegendContent.call(_this, newHtml);
-        }, 'json');
-    };
-    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
-        if (!this.visible) {
-            return;
-        }
-        var urlCopy = this.url;
-        if (urlCopy[urlCopy.length - 1] != '/') {
-            urlCopy += '/';
-        }
-        urlCopy += 'identify?callback=?';
-        var __this = this;
-        if (this._popupRequest != null) {
-            this._popupRequest.abort();
-        }
-        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
-                var r = _a[_i];
-                var popupHtml = '<table class="esri-popup-table">';
-                for (var a in r['attributes']) {
-                    if (r['attributes'].hasOwnProperty(a)) {
-                        var attrVal = r['attributes'][a];
-                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                            continue;
-                        }
-                        var attr = a;
-                        if (attr.length > 14) {
-                            attr = attr.slice(0, 11) + '...';
-                        }
-                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
-                    }
-                }
-                popupHtml += '</table>';
-                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);
-            }
-        }, 'json');
-        this._popupRequest.always(function () {
-            __this._popupRequest = null;
-        });
-    };
-    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
-        /**
-         *
-         * @returns {ol.source.TileArcGISRest} the vector source
-         */
-        get: function () {
-            return _super.prototype.getSource.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
-        /**
-         *
-         * @returns the ol layer
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerEsriMapServer;
-}(LayerBase_1.LayerBase));
-exports.LayerEsriMapServer = LayerEsriMapServer;
-nm.LayerEsriMapServer = LayerEsriMapServer;
-exports.default = LayerEsriMapServer;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var checkDefined = __webpack_require__(9);
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-var MapMoveCls = (function (_super) {
-    __extends(MapMoveCls, _super);
-    /**
-     * constructor called implicitly
-     */
-    function MapMoveCls() {
-        var _this = _super.call(this, 'map move') || this;
-        _this._arrLyrRequest = [];
-        _this._arrLyrTimeout = [];
-        _this._arrLayer = [];
-        _this._lookupLayer = {};
-        _this._mapMoveCallbacks = [];
-        _this._mapMoveCallbacksLookup = {};
-        _this._mapMoveCallbackDelays = [];
-        _this._mapMoveCallbackContext = [];
-        _this._mapMoveCallbackTimeout = [];
-        _this._mapExtent = undefined;
-        _this._zoomLevel = undefined;
-        return _this;
-    }
-    /**
-     * initialize the map move object
-     * @param theMap - the ol map
-     */
-    MapMoveCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-            _this._updateMapExtent();
-            // trigger the layer updates
-            for (var i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-            // trigger the map callbacks
-            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    };
-    MapMoveCls.prototype._updateMapExtent = function () {
-        var theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-        var extentArray = theView.calculateExtent(this.map.getSize());
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    };
-    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
-        /**
-         * return the map extent
-         */
-        get: function () {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-            return this._mapExtent;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * Trigger the layer load
-     * @param lyr the layer being acted on
-     * @param index index of the layer
-     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
-        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        }
-        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        }
-        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-        // dummy callback used if before load returns false
-        var callbackFunc = function () { };
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-            var __this_1 = this;
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    var _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
-                        /**
-                         * @type {LayerBaseVector}
-                         */
-                        theLayer.mapMoveCallback(d);
-                        theLayer.loadCallback();
-                    }, 'json').fail(function (jqXHR) {
-                        if (jqXHR.statusText != 'abort') {
-                            console.log('failed');
-                            console.log(theLayer.url);
-                            console.log(theLayer.mapMoveParams);
-                        }
-                    }).always(function () {
-                        _innerThis._arrLyrTimeout[theIndex] = null;
-                        _innerThis._arrLyrRequest[theIndex] = null;
-                    });
-                }
-                innerFunction.call(__this_1, lyr, index);
-            };
-        }
-        else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    };
-    /**
-     * trigger the map move call back at the given index
-     * @param ind - the index of the layer
-     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
-     * @param functionId=undefined the function id used to reference the added callback function
-     */
-    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
-        if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
-            throw 'either the function index or the id must be defined';
-        }
-        if (typeof ind !== 'number') {
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-        if (ind < 0) {
-            console.log('function not found');
-            return;
-        }
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-        var ctx = this._mapMoveCallbackContext[ind];
-        var theFunc = this._mapMoveCallbacks[ind];
-        var __this = this;
-        var f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);
-            }
-            else {
-                theFunc(__this._mapExtent, __this._zoomLevel, eventType);
-            }
-        };
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    };
-    /**
-     * Add a layer to the interaction
-     * @param  lyr - layer to add
-     * @param triggerOnAdd - if the layer should be loaded on add
-     */
-    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
-        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-            return;
-        }
-        this._checkInit();
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    };
-    /**
-     * add a callback to the map move event
-     * @param func - callback function
-     * @param context - the context to use for this function
-     * @param delay=50 the delay before call load
-     * @param triggerOnAdd if the layer should be loaded on add to mapMove
-     * @param functionId optional id to reference the function later for outside triggering
-     */
-    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-            return;
-        }
-        this._checkInit();
-        if (!functionId) {
-            functionId = makeGuid_1.default();
-        }
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = functionId;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    };
-    return MapMoveCls;
-}(mapInteractionBase_1.default));
-exports.MapMoveCls = MapMoveCls;
-nm.MapMoveCls = MapMoveCls;
-exports.default = MapMoveCls;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = __webpack_require__(5);
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-var FeatureLayerProperties = (function () {
-    /**
-     *
-     * @param feature the feature
-     * @param layer - the layer in the popup
-     * @param layerIndex - index of the layer
-     * @param selectionLayer - the ol selection layer
-     * @param [esriLayerName=undefined] - esri layer name
-     */
-    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
-        get: function () {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            }
-            else {
-                return this.layer.name;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FeatureLayerProperties;
-}());
-exports.FeatureLayerProperties = FeatureLayerProperties;
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-var MapPopupCls = (function (_super) {
-    __extends(MapPopupCls, _super);
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-    /**
-     * map popup constructor
-     */
-    function MapPopupCls() {
-        var _this = _super.call(this, 'map popup') || this;
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayerNames = [];
-        _this._arrPopupLayers = [];
-        _this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        _this._esriMapServiceLayers = [];
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-        _this._passThroughLayerFeatureArray = [];
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-        return _this;
-    }
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-    MapPopupCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        var $map;
-        var target = this.map.getTarget();
-        if (typeof target == 'string') {
-            $map = $('#' + target);
-        }
-        else {
-            $map = $(target);
-        }
-        $map.append('<div class="ol-popup">' +
-            '<span class="ol-popup-closer">X</span>' +
-            '<div class="popup-content"></div>' +
-            '</div>');
-        this._$popupContainer = $map.find('.ol-popup');
-        this._$popupContent = $map.find('.popup-content');
-        this._$popupCloser = $map.find('.ol-popup-closer');
-        var _ease = function (n) {
-            return ol.easing.inAndOut(n);
-        };
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
-            autoPanAnimation: {
-                duration: 250,
-                source: theMap.getView().getCenter(),
-                easing: _ease
-            }
-        });
-        this._map.addOverlay(this._popupOverlay);
-        this._$popupCloser.click(function (evt) {
-            _this.closePopup();
-        });
-        // display popup on click
-        this._map.on('singleclick', function (evt) {
-            _this.closePopup();
-            _this._popupCoordinate = evt['coordinate'];
-            // esri map service layers
-            if (_this._esriMapServiceLayers.length > 0) {
-                var queryParams = {
-                    geometry: evt['coordinate'].join(','),
-                    geometryType: 'esriGeometryPoint',
-                    layers: 'all',
-                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
-                    imageDisplay: _this._map.getSize().join(',') + ',96',
-                    returnGeometry: true,
-                    tolerance: 15,
-                    f: 'pjson'
-                };
-                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
-                    var l = _a[_i];
-                    l.getPopupInfo(queryParams);
-                }
-            }
-            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
-            _this._passThroughLayerFeatureArray = [];
-            _this._currentPopupIndex = -1;
-            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                var featObj = layerFeatureObjectArray[i];
-                var props = featObj.feature.getProperties();
-                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
-                //skip if return was false
-                if (popupContentResponse === false) {
-                    //continue;
-                }
-                else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
-                    _this._passThroughLayerFeatureArray.push(featObj);
-                }
-                else {
-                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                }
-            }
-            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
-            _this._currentPopupIndex = -1;
-            var popupHtml = '<div class="ol-popup-nav">';
-            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
-            popupHtml += "<span>&nbsp;of&nbsp;</span>";
-            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
-            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
-            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
-            popupHtml += '</div>';
-            popupHtml += '<div class="ol-popup-inner">';
-            popupHtml += '</div>';
-            _this._$popupContent.html(popupHtml);
-            _this._$popupContent.find('.previous-popup').click(function () {
-                if (_this._popupContentLength == 1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == 0) {
-                    _this._currentPopupIndex = _this._popupContentLength - 1;
-                }
-                else {
-                    _this._currentPopupIndex--;
-                }
-                _this._triggerFeatSelect();
-            });
-            var nextPopup = _this._$popupContent.find('.next-popup');
-            nextPopup.click(function () {
-                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
-                    return;
-                }
-                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
-                    _this._currentPopupIndex = 0;
-                }
-                else {
-                    _this._currentPopupIndex++;
-                }
-                _this._triggerFeatSelect();
-            });
-            if (_this._popupContentLength > 0) {
-                nextPopup.trigger('click');
-                _this._popupOverlay.setPosition(_this._popupCoordinate);
-                _this._$popupContent.scrollTop(0);
-                _this._popupOpen = true;
-            }
-        });
-        //change mouse cursor when over marker
-        this._map.on('pointermove', function (evt) {
-            if (evt['dragging']) {
-                return;
-            }
-            var pixel = _this.map.getEventPixel(evt['originalEvent']);
-            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
-                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
-                    var olLayer = _a[_i];
-                    if (lyrCandidate == olLayer) {
-                        return true;
-                    }
-                }
-                return false;
-            });
-            var mapElement = _this.map.getTargetElement();
-            mapElement.style.cursor = hit ? 'pointer' : '';
-        });
-        return true;
-    };
-    /**
-     * helper to select features
-     * @private
-     */
-    MapPopupCls.prototype._triggerFeatSelect = function () {
-        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-        this.clearSelection();
-        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-        $layerNameSpan.html(lyrFeatObj.layerName);
-        $innerPopup.html(lyrFeatObj.popupContent);
-        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f(this._$popupContent);
-        }
-    };
-    /**
-     *
-     * @param feature - the ol feature
-     * @param {LayerEsriMapServer} lyr - the map server layer
-     * @param {string} popupContent - popup content
-     * @param {string} esriName - esri layer name
-     */
-    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
-        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
-        featLayerObject.popupContent = popupContent;
-        this._passThroughLayerFeatureArray.push(featLayerObject);
-        this._popupContentLength++;
-        $('.popup-content-length').html(this._popupContentLength.toFixed());
-        if (!this._popupOpen) {
-            this._$popupContent.find('.next-popup').trigger('click');
-            this._popupOverlay.setPosition(this._popupCoordinate);
-            this._$popupContent.scrollTop(0);
-            this._popupOpen = true;
-        }
-    };
-    /**
-     *
-     * @param  pixel - the ol pixel
-     * @returns  feature layer properties
-     * @private
-     */
-    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
-        var _this = this;
-        var layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
-            }
-        });
-        return layerFeatureObjectArray;
-    };
-    MapPopupCls.prototype.closePopup = function () {
-        this._checkInit();
-        this._popupOpen = false;
-        this._popupOverlay.setPosition(undefined);
-        this._$popupCloser[0].blur();
-        this.clearSelection();
-        this._$popupContent.html('');
-        return false;
-    };
-    ;
-    /**
-     *
-     * @param chgFunction - popup change function
-     */
-    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
-        this._popupChangedFunctions.push(chgFunction);
-    };
-    /**
-     *
-     * @param {LayerBase|*} lyr - the layer being acted on
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns  the new selection layer
-     * @private
-     */
-    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
-        this._checkInit();
-        selectionStyle = selectionStyle || {};
-        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-        selectionStyle.width = selectionStyle.width || 10;
-        var theStyle;
-        if (selectionStyle.olStyle) {
-            theStyle = selectionStyle.olStyle;
-        }
-        else {
-            theStyle = new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: selectionStyle.color,
-                    width: selectionStyle.width
-                }),
-                image: new ol.style.Circle({
-                    radius: 7,
-                    fill: new ol.style.Fill({ color: selectionStyle.color }),
-                    stroke: new ol.style.Stroke({ color: selectionStyle.color, width: 1 })
-                }),
-                fill: new ol.style.Fill({
-                    color: selectionStyle.color
-                })
-            });
-        }
-        var selectionLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: theStyle
-        });
-        selectionLayer.setZIndex(100);
-        this._selectionLayers.push(selectionLayer);
-        this._selectionLayerLookup[lyr.id] = selectionLayer;
-        this.map.addLayer(selectionLayer);
-        return selectionLayer;
-    };
-    /**
-     * Add popup to the map
-     * @param {LayerBase|*} lyr The layer that the popup with act on
-     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._arrPopupLayerIds.push(lyr.id);
-        this._arrPopupLayerNames.push(lyr.name);
-        this._arrPopupLayers.push(lyr);
-        this._arrPopupOlLayers.push(lyr.olLayer);
-        this._arrPopupContentFunction.push(popupContentFunction);
-        return selectionLayer;
-    };
-    ;
-    /**
-     *
-     * @param {LayerBase} lyr - layer
-     */
-    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
-        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
-        if (idx > -1) {
-            this._arrPopupLayerIds.splice(idx, 1);
-            this._arrPopupLayerNames.splice(idx, 1);
-            this._arrPopupLayers.splice(idx, 1);
-            this._arrPopupOlLayers.splice(idx, 1);
-            this._arrPopupContentFunction.splice(idx, 1);
-            this._selectionLayers.splice(idx, 1);
-            delete this._selectionLayerLookup[lyr.id];
-        }
-    };
-    /**
-     *
-     * @param {LayerEsriMapServer} lyr - map server layer
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._esriMapServiceLayers.push(lyr);
-        return selectionLayer;
-    };
-    MapPopupCls.prototype.clearSelection = function () {
-        this._checkInit();
-        for (var i = 0; i < this._selectionLayers.length; i++) {
-            this._selectionLayers[i].getSource().clear();
-        }
-        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f();
-        }
-    };
-    ;
-    /**
-     * Add a function to be called when the map is clicked but before any popups are implemented
-     * @param {function} func - the map click function
-     */
-    MapPopupCls.prototype.addMapClickFunction = function (func) {
-        this._mapClickFunctions.push(func);
-    };
-    return MapPopupCls;
-}(mapInteractionBase_1.default));
-exports.MapPopupCls = MapPopupCls;
-nm.MapPopupCls = MapPopupCls;
-exports.default = MapPopupCls;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('olHelpers');
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param [options={}] config options
- * @param [options.divId=map] map div id
- * @param [options.center={}] center config object
- * @param [options.center.x=-10018378] center x, web mercator x or lon
- * @param [options.center.y=5574910] center y, web mercator y or lat
- * @param [options.zoom=7] zoom level
- * @param [options.minZoom=undefined] min zoom
- * @param [options.maxZoom=undefined] max zoom
- * @param [options.baseSwitcher=true] if add base map switcher
- * @param [options.fullScreen=false] if add base map switcher
- * @returns the ol map
- */
-function quickMapBase(options) {
-    if (options === void 0) { options = {}; }
-    options.divId = options.divId || 'map';
-    options.center = options.center || { x: -10018378, y: 5574910 };
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-    var $mapDiv = $('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-    var osmLayer = new ol.layer.Tile({ source: new ol.source.OSM() });
-    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-    if (options.baseSwitcher) {
-        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-        //  switcherContent += '"></div>';
-        //  $mapDiv.append(switcherContent);
-        //
-        // $mapDiv.find('.base-map-switcher').click(function() {
-        //      "use strict";
-        //      osmLayer.setVisible(!osmLayer.getVisible());
-        //      satLayer.setVisible(!satLayer.getVisible());
-        //
-        //      if (osmLayer.getVisible()){
-        //          $(this).css('background', aerialCss);
-        //      } else {
-        //          $(this).css('background', osmCss);
-        //      }
-        //  });
-    }
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new ol.geom.Point([options.center.x, options.center.y]);
-        new ol.proj.Projection({ code: "EPSG:4326" });
-        p.transform(new ol.proj.Projection({ code: "EPSG:4326" }), new ol.proj.Projection({ code: "EPSG:3857" }));
-        var coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-    var controls = ol.control.defaults({
-        attributionOptions: { collapsible: false }
-    });
-    var view = new ol.View({
-        center: [options.center.x, options.center.y],
-        zoom: options.zoom,
-        minZoom: options.minZoom,
-        maxZoom: options.maxZoom
-    });
-    var map = new ol.Map({
-        layers: [osmLayer],
-        target: options.divId,
-        controls: controls,
-        view: view
-    });
-    if (options.fullScreen) {
-        map.addControl(new ol.control.FullScreen({}));
-    }
-    return map;
-}
-exports.quickMapBase = quickMapBase;
-nm.quickMapBase = quickMapBase;
-exports.default = quickMapBase;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var nm = provide_1.default('olHelpers.zoomResolutionConvert');
-var _zoomResLookup = [
-    156543.03392804097,
-    78271.51696402048,
-    39135.75848201024,
-    19567.87924100512,
-    9783.93962050256,
-    4891.96981025128,
-    2445.98490512564,
-    1222.99245256282,
-    611.49622628141,
-    305.748113140705,
-    152.8740565703525,
-    76.43702828517625,
-    38.21851414258813,
-    19.109257071294063,
-    9.554628535647032,
-    4.777314267823516,
-    2.388657133911758,
-    1.194328566955879,
-    0.5971642834779395,
-    0.29858214173896974,
-    0.14929107086948487,
-    0.07464553543474244,
-    0.03732276771737122,
-    0.01866138385868561,
-    0.009330691929342804,
-    0.004665345964671402,
-    0.002332672982335701,
-    0.0011663364911678506,
-    0.0005831682455839253 //28
-];
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-function zoomToResolution(zoomLevel) {
-    "use strict";
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        }
-        else {
-            console.log("invalid zoom level provided: " + zoomLevel);
-            return undefined;
-        }
-    }
-    else {
-        return undefined;
-    }
-}
-exports.zoomToResolution = zoomToResolution;
-nm.zoomToResolution = zoomToResolution;
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
-        if (resolution >= _zoomResLookup[i]) {
-            return i;
-        }
-    }
-    return 0;
-}
-exports.resolutionToZoom = resolutionToZoom;
-nm.resolutionToZoom = resolutionToZoom;
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 1/4/2016.
- */
-var provide_1 = __webpack_require__(0);
-var ol = __webpack_require__(2);
-var nm = provide_1.default('olHelpers.esriToOlStyle');
-/**
- * This callback is displayed as part of the Requester class.
- * @callback styleFunc
- * @param {ol.Feature} feat - openlayers feature
- * @param {number} resolution - map resolution
- */
-/**
- *
- * @param {Array<number>} colorArray - input color array
- * @param {number} opacity - the opacity 0 to 1
- * @returns {string} rgba string
- * @private
- */
-function _colorArrayToRgba(colorArray, opacity) {
-    "use strict";
-    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
-}
-/**
- * escape html charcters
- * @param {string} str - input string
- * @returns {string} escaped string
- */
-function htmlEscape(str) {
-    return String(str)
-        .replace(/&/g, '&amp;')
-        .replace(/"/g, '&quot;')
-        .replace(/'/g, '&#39;')
-        .replace(/</g, '&lt;')
-        .replace(/>/g, '&gt;');
-}
-nm.htmlEscape = htmlEscape;
-var CommonSymbol = (function () {
-    /**
-     *
-     * @param symbolObj
-     * @param {number} opacity
-     */
-    function CommonSymbol(symbolObj, opacity) {
-        this.symbolObj = symbolObj;
-        this.opacity = opacity;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return CommonSymbol;
-}());
-var PointSymbol = (function (_super) {
-    __extends(PointSymbol, _super);
-    function PointSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSMS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                var radius = _this.symbolObj.size;
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Circle({
-                        radius: radius,
-                        fill: new ol.style.Fill({
-                            color: innerColor
-                        }),
-                        stroke: new ol.style.Stroke({ color: outerColor, width: outlineWidth })
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
-                break;
-            case 'esriPMS':
-                _this.olStyle = new ol.style.Style({
-                    image: new ol.style.Icon({ src: "data:image/png;base64," + _this.symbolObj['imageData'] })
-                });
-                _this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + _this.symbolObj['imageData'] + "\">";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PointSymbol;
-}(CommonSymbol));
-var LineSymbol = (function (_super) {
-    __extends(LineSymbol, _super);
-    function LineSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
-            case 'esriSLS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var lineWidth = _this.symbolObj.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: innerColor,
-                        //lineDash: [4],
-                        width: lineWidth
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 4px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: -1px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return LineSymbol;
-}(CommonSymbol));
-var PolygonSymbol = (function (_super) {
-    __extends(PolygonSymbol, _super);
-    function PolygonSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj['type']) {
-            case 'esriSFS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                _this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: outerColor,
-                        //lineDash: [4],
-                        width: outlineWidth
-                    }),
-                    fill: new ol.style.Fill({
-                        color: innerColor
-                    })
-                });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "border: solid " + outerColor + " 1px;";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 9px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: 2px;";
-                _this.legendHtml += "\"></span>";
-                break;
-            default:
-                console.log(_this.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);
-        }
-        return _this;
-    }
-    return PolygonSymbol;
-}(CommonSymbol));
-var SymbolGenerator = (function () {
-    function SymbolGenerator(esriResponse) {
-        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-        this.renderer = esriResponse.drawingInfo.renderer;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-    return SymbolGenerator;
-}());
-var SingleSymbol = (function (_super) {
-    __extends(SingleSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the symbol class to use
-     */
-    function SingleSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.symbol = _this.renderer.symbol;
-        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);
-        _this.olStyle = symbolObj.olStyle;
-        _this.legendHtml = symbolObj.legendHtml;
-        return _this;
-    }
-    return SingleSymbol;
-}(SymbolGenerator));
-var UniqueValueSymbol = (function (_super) {
-    __extends(UniqueValueSymbol, _super);
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param SymbolClass - the Symbol class definition
-     */
-    function UniqueValueSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];
-        _this.propertyName = _this.renderer['field1'];
-        _this.defaultSymbol = _this.renderer['defaultSymbol'];
-        if (_this.defaultSymbol) {
-            var symbolObj = new SymbolClass(_this.defaultSymbol, _this.opacity);
-            _this.defaultStyle = symbolObj.olStyle;
-            _this.defaultLabelHtml = "<span class=\"legend-layer-subitem\">" + htmlEscape(_this.renderer['defaultLabel']) + "</span>" + symbolObj.legendHtml;
-        }
-        else {
-            _this.defaultStyle = undefined;
-            _this.defaultLabelHtml = 'other';
-        }
-        _this.valueArray = [];
-        _this.labelArray = [];
-        _this.legendArray = [];
-        _this.propertyStyleLookup = {};
-        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {
-            var uniqueVal = _a[_i];
-            _this.labelArray.push(uniqueVal['label']);
-            _this.valueArray.push(uniqueVal['value']);
-            var uniqueSym = new SymbolClass(uniqueVal.symbol, _this.opacity);
-            _this.legendArray.push("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>" + uniqueSym.legendHtml);
-            _this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
-        }
-        _this.olStyle = function (feature) {
-            var checkProperties = feature.getProperties();
-            var checkProperty = checkProperties[_this.propertyName];
-            var returnValue;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
-            }
-            else {
-                returnValue = [_this.defaultStyle];
-            }
-            return returnValue;
-        };
-        if (_this.defaultLabelHtml !== null) {
-            _this.legendArray.push(_this.defaultLabelHtml);
-        }
-        _this.legendHtml = '<ul>';
-        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {
-            var h = _c[_b];
-            _this.legendHtml += "<li>" + h + "</li>";
-        }
-        _this.legendHtml += '</ul>';
-        return _this;
-    }
-    return UniqueValueSymbol;
-}(SymbolGenerator));
-/**
- * style and legend object
- * @typedef {object} styleAndLegend
- * @property {styleFunc} style - style function
- * @property {string} legend - legend content
- */
-/**
- *
- * @param {object} esriResponse - layer info
- * @returns {styleAndLegend} style and legend object
- */
-function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    "use strict";
-    var renderer = esriResponse.drawingInfo.renderer;
-    var symbolLegendOut = null;
-    switch (renderer.type) {
-        case 'simple':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse.geometryType + ' not handled');
-            }
-            break;
-        case 'uniqueValue':
-            switch (esriResponse.geometryType) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        default:
-            alert('not handled renderer type: ' + renderer['type']);
-    }
-    if (symbolLegendOut == null) {
-        return { style: undefined, legend: '' };
-    }
-    else {
-        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
-    }
-}
-exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-/**
- *
- * @param {object} lyrObject - the layer as defined in the response
- * @param {boolean} [skipLayerNameAndExpander=false] use only icons
- * @returns {string} legend html
- */
-function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
-    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
-    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
-    var layerName = lyrObject['layerName'];
-    var legendItems = lyrObject['legend'];
-    var legendHtml = '';
-    if (!skipLayerNameAndExpander) {
-        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
-    }
-    if (legendItems.length == 1) {
-        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
-    }
-    else {
-        if (!skipLayerNameAndExpander) {
-            legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
-        }
-        legendHtml += '<ul>';
-        for (var i = 0; i < legendItems.length; i++) {
-            legendHtml += "<li>";
-            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
-            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
-            legendHtml += "</li>";
-        }
-        legendHtml += '</ul>';
-    }
-    if (!skipLayerNameAndExpander) {
-        legendHtml = "<span class=\"legend-layer-subitem\">" + layerName + "</span>" + legendHtml;
-    }
-    return legendHtml;
-}
-/**
- * make map service legent
- * @param {object} esriResponse - layer info
- * @returns {string} legend content
- */
-function makeMapServiceLegend(esriResponse) {
-    "use strict";
-    var newLegendHtml = '';
-    var layers = esriResponse['layers'];
-    if (layers.length == 1) {
-        newLegendHtml += mapServiceLegendItem(layers[0], true);
-    }
-    else {
-        newLegendHtml += '<ul>';
-        for (var i = 0; i < layers.length; i++) {
-            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
-        }
-        newLegendHtml += '</ul>';
-    }
-    return newLegendHtml;
-}
-exports.makeMapServiceLegend = makeMapServiceLegend;
-nm.makeMapServiceLegend = makeMapServiceLegend;
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/16/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var makeGuid_1 = __webpack_require__(3);
-var mapMove_1 = __webpack_require__(6);
-var nm = provide_1.default('collections');
-var $ = __webpack_require__(1);
-var LayerGroup = (function () {
-    /**
-     *
-     * @param {object} [groupConfig={}] - group configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
-     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
-     * @param {LayerGroup} [parent=undefined] - the parent group
-     */
-    function LayerGroup(groupConfig, parent) {
-        this.groupLayers = [];
-        this.groupLayersLookup = {};
-        this.groupGroups = [];
-        this.groupGroupsLookup = {};
-        this.itemIdArray = [];
-        if (typeof groupConfig == 'undefined') {
-            this.parent = null;
-            this.groupId = 'root';
-            this.groupName = 'root';
-            this.allGroupLookup = { root: this };
-            this.allGroupArray = [this];
-            this.allLayerArray = [];
-            this.allLayerLookup = {};
-            this.layerParentLookup = {};
-            this.collapse = false;
-            this.addCheck = false;
-        }
-        else {
-            this.groupId = makeGuid_1.default();
-            this.parent = parent;
-            this.groupName = groupConfig.groupName;
-            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
-            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
-        }
-    }
-    /**
-     *
-     * @param {object} groupConfig - configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
-     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
-     * @param {Array<LayerGroup>} parents parent groups
-     * @returns {LayerGroup} the layer group just added
-     */
-    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
-        var parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        }
-        else {
-            parent = 'root';
-        }
-        /**
-         * @type {LayerGroup}
-         */
-        var parentGroup = this.allGroupLookup[parent];
-        var newGroup = new LayerGroup(groupConfig, parentGroup);
-        this.allGroupLookup[newGroup.groupId] = newGroup;
-        this.allGroupArray.push(newGroup);
-        parentGroup.groupGroups.push(newGroup);
-        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
-        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
-            console.log(newGroup.groupId);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newGroup.groupId);
-        return newGroup;
-    };
-    /**
-     *
-     * @param {LayerBase} newLayer the layer to be added
-     * @param {Array} parents array
-     */
-    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
-        var parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        }
-        else {
-            parent = 'root';
-        }
-        this.allLayerLookup[newLayer.id] = newLayer;
-        this.allLayerArray.push(newLayer);
-        /**
-         * @type {LayerGroup}
-         */
-        var parentGroup = this.allGroupLookup[parent];
-        parentGroup.groupLayers.push(newLayer);
-        parentGroup.groupLayersLookup[newLayer.id] = newLayer;
-        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
-            console.log(newLayer.id);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newLayer.id);
-        this.layerParentLookup[newLayer.id] = parentGroup;
-    };
-    LayerGroup.prototype.getLegendHtml = function (legendId, options) {
-        var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">";
-        legendHtml += "<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">" +
-            ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") +
-            "<span></span>" +
-            "</label></li>";
-        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
-        return legendHtml;
-    };
-    /**
-     * @param {Array} itemIds the items to process
-     * @param {LayerGroup} theGroup new group
-     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
-     * @static
-     * @returns {string} html string
-     */
-    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {
-        if (itemIds.length == 0) {
-            return '';
-        }
-        var theHml = '';
-        var itemId = itemIds[0];
-        if (theGroup.groupLayersLookup[itemId]) {
-            /**
-             * @type {LayerBase}
-             */
-            var lyr = theGroup.groupLayersLookup[itemId];
-            theHml += "<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">" + lyr.getLegendDiv() + '</li>';
-        }
-        else if (theGroup.groupGroupsLookup[itemId]) {
-            /**
-             * type {LayerGroup}
-             */
-            var otherGroup = theGroup.groupGroupsLookup[itemId];
-            theHml += "<li>";
-            theHml += "<div id=\"" + otherGroup.groupId + "-legend-layer-div\" " +
-                ("class=\"legend-layer-group  " + layerDivClasses.join(' ') + "\">");
-            if (otherGroup.addCheck) {
-                theHml += "<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">" +
-                    ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>");
-            }
-            else {
-                theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>";
-            }
-            theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander";
-            theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">";
-            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
-            theHml += '</span>';
-            //parents.push(groupId);
-            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
-            theHml += '</div>';
-            theHml += '</li>';
-        }
-        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
-    };
-    return LayerGroup;
-}());
-/**
- * a wrapper to make a legend
- */
-var LayerLegend = (function () {
-    /**
-     *
-     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
-     * @param {string} divId the div where the legend should be added
-     * @param {object} options for legend
-     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
-     * @param {string} [options.legendTitle=Legend] the legend title
-     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
-     */
-    function LayerLegend(legendItems, divId, options) {
-        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
-            var i = legendItems_1[_i];
-            if (typeof i == 'undefined') {
-                throw 'undefined item passed in array to legend constructor';
-            }
-        }
-        options = options || {};
-        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
-        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
-        options.layerDivClasses = options.layerDivClasses || [];
-        // if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove_1.default.checkInit();
-        }
-        this.$divElement = $('#' + divId);
-        this._legendItems = legendItems;
-        this.layerGroup = new LayerGroup();
-        this._buildTree(legendItems);
-        this.legendId = makeGuid_1.default();
-        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
-        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
-            var l = _b[_a];
-            l.applyCollapse();
-        }
-        var _this = this;
-        //// if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove_1.default.checkInit();
-            mapMove_1.default.addCallback(function (ext, zoom, evt) {
-                if (typeof evt == 'undefined' || evt == 'change:resolution') {
-                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
-                        var lyr = _a[_i];
-                        var $lyrLi = $('#' + lyr.id + '-layer-li');
-                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
-                            $lyrLi.addClass('layer-not-visible');
-                        }
-                        else {
-                            $lyrLi.removeClass('layer-not-visible');
-                        }
-                    }
-                }
-            }, this, 100, true, 'legend1');
-        }
-        // <editor-fold desc="add event listeners">
-        this.$divElement.find(".suppress-by-extent").change(function () {
-            var legendLayerLis = $('.legend-layer-li');
-            if (this.checked) {
-                legendLayerLis.removeClass('layer-force-show');
-            }
-            else {
-                legendLayerLis.addClass('layer-force-show');
-            }
-        });
-        this.$divElement.find('.legend-check').change(function () {
-            var lyrId = this.id.replace('-legend-layer-check', '');
-            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
-        });
-        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
-            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
-        });
-        this.$divElement.find('.layer-group-expander').click(function () {
-            var $this = $(this);
-            $this.removeClass('legend-layer-group-initial-collapse');
-            $this.siblings('ul').slideToggle();
-            if ($this.hasClass('legend-layer-group-collapsed')) {
-                $this.removeClass('legend-layer-group-collapsed');
-                $this.html('&#9660;');
-            }
-            else {
-                $this.addClass('legend-layer-group-collapsed');
-                $this.html('&#9654;');
-            }
-        });
-        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
-        // </editor-fold>
-    }
-    /**
-     * @param {Array} [legendItems=this._layerConfig] the legend items
-     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
-     * @private
-     */
-    LayerLegend.prototype._buildTree = function (legendItems, parents) {
-        if (legendItems.length == 0) {
-            return;
-        }
-        var oneItem = legendItems[0];
-        //reset the parent if the item is in the base array
-        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
-            parents = [];
-        }
-        if (typeof oneItem['groupName'] !== 'undefined') {
-            var groupItem = legendItems[0];
-            var newGroup = this.layerGroup.addGroup(groupItem, parents);
-            parents.push(newGroup.groupId);
-            this._buildTree(groupItem.items, parents);
-        }
-        else {
-            /**
-             * @type {LayerBase}
-             */
-            var layerItem = legendItems[0];
-            this.layerGroup.addLegendLayer(layerItem, parents);
-        }
-        this._buildTree(legendItems.slice(1), parents);
-    };
-    return LayerLegend;
-}());
-nm.LayerLegend = LayerLegend;
-exports.default = LayerLegend;
-
-
-/***/ }),
-/* 17 */,
-/* 18 */,
-/* 19 */,
-/* 20 */,
-/* 21 */,
-/* 22 */,
-/* 23 */,
-/* 24 */,
-/* 25 */,
-/* 26 */,
-/* 27 */,
-/* 28 */,
-/* 29 */,
-/* 30 */,
-/* 31 */,
-/* 32 */,
-/* 33 */,
-/* 34 */,
-/* 35 */,
-/* 36 */,
-/* 37 */,
-/* 38 */,
-/* 39 */,
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 9/23/2016.
- */
-var quickMap_1 = __webpack_require__(7);
-var LayerEsriMapServer_1 = __webpack_require__(10);
-var LayerLegend_1 = __webpack_require__(16);
-var map = quickMap_1.quickMap();
-var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');
-var sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true });
-map.addLayer(wisDotRegions.olLayer);
-map.addLayer(sixYearPlan.olLayer);
-var layerArray = [
-    wisDotRegions,
-    sixYearPlan
-    // tipConfig.tipSegmentLayer,
-    // tipConfig.metamanagerSegments,
-    // {
-    //     groupName: 'ITS Inventory Layers',
-    //     collapse: true,
-    //     addCheck: false,
-    //     items: tipConfig.itsLayerCollection.layers
-    // }
-];
-var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\simple_map.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
-/******/ ]);
+
+/******/ });
 //# sourceMappingURL=simple_map.js.map
\ No newline at end of file
diff --git a/test/serve/js/simple_map.js.map b/test/serve/js/simple_map.js.map
index 2e971e9e8e5de93a5d23b444f1ec1995290addfd..72304305b73fe6a89f99f66fef132dd30b7a4da5 100644
--- a/test/serve/js/simple_map.js.map
+++ b/test/serve/js/simple_map.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83**","webpack:///./src/util/provide.ts?5c82**","webpack:///external \"$\"?57aa**","webpack:///external \"ol\"?81ed**","webpack:///./src/util/makeGuid.ts?e80e**","webpack:///./src/olHelpers/mapPopup.ts?5d6c**","webpack:///./src/olHelpers/mapInteractionBase.ts?f419**","webpack:///./src/olHelpers/mapMove.ts?6a2b**","webpack:///./src/olHelpers/quickMap.ts?1069**","webpack:///./src/layers/LayerBase.ts?bf94**","webpack:///./src/util/checkDefined.ts?bcd7**","webpack:///./src/layers/LayerEsriMapServer.ts?9c85*","webpack:///./src/olHelpers/mapMoveCls.ts?cd45**","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7**","webpack:///./src/olHelpers/quickMapBase.ts?fb65**","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b**","webpack:///./src/olHelpers/esriToOlStyle.ts?9363*","webpack:///./src/collections/LayerLegend.ts?9de6","webpack:///./test/demo/simple_map.ts"],"names":[],"mappings":"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","file":"simple_map.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 40);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","module.exports = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 2\n// module chunks = 0 1 2 3","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/makeGuid.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopup.ts","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapInteractionBase.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMove.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nimport ol = require('custom-ol');\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): ol.Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMap.ts","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport makeGuid from '../util/makeGuid';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: ol.source.Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: ol.layer.Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerBase.ts","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/checkDefined.ts","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.Tile,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/layers/LayerEsriMapServer.ts","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = functionId;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapMoveCls.ts","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: ol.Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: ol.Coordinate;\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: Object;\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupLayerNames: Array<string>;\r\n    private _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return ol.easing.inAndOut(n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector, selectionStyle: {color?: string, width?: number, olStyle?: ol.style.Style}): ol.layer.Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: ol.style.Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/mapPopupCls.ts","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): ol.Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    const controls = ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }\r\n    );\r\n\r\n    const view = new ol.View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer],\r\n        target: options.divId,\r\n        controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/quickMapBase.ts","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/zoomResolutionConvert.ts","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface EsriResponse{\r\n    drawingInfo: {\r\n        renderer: EsriRenderer\r\n    },\r\n    geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n    type: string;\r\n    symbol: EsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: string;\r\n        width: number;\r\n    },\r\n    color: string;\r\n    width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: EsriSymbol;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    opacity: number;\r\n    renderer: EsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n\r\n    constructor(esriResponse: EsriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse.drawingInfo.renderer;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    symbol: EsriSymbol;\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer.symbol;\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n    propertyName: string;\r\n    defaultSymbol: EsriSymbol;\r\n    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.StyleFunction;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: Object;\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse: EsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n\r\n        this.olStyle = (feature: ol.Feature) => {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[this.propertyName];\r\n\r\n            let returnValue;\r\n            if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = null;\r\n\r\n    switch (renderer.type) {\r\n        case 'simple':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse.geometryType + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/olHelpers/esriToOlStyle.ts","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: any;\r\n    addCheck: any;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?, parent?) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n    getLegendHtml(legendId, options) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    $divElement: any;\r\n    _legendItems: any;\r\n    layerGroup: any;\r\n    legendId: any;\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems, divId, options) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems, parents?) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/LayerLegend.ts","/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../../src/olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../../src/layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../../src/collections/LayerLegend';\r\n\r\n\r\nlet map = quickMap();\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\n\r\nlet sixYearPlan = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', {name: 'Six Year Plan', legendCollapse: true});\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\n\r\nlet layerArray = [\r\n    wisDotRegions,\r\n    sixYearPlan\r\n    // tipConfig.tipSegmentLayer,\r\n    // tipConfig.metamanagerSegments,\r\n    // {\r\n    //     groupName: 'ITS Inventory Layers',\r\n    //     collapse: true,\r\n    //     addCheck: false,\r\n    //     items: tipConfig.itsLayerCollection.layers\r\n    // }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/simple_map.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0?0aa8"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"simple_map.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/serve/js/slider-test.js b/test/serve/js/slider-test.js
index afb41fe06dd5972a2c0abf8f2f8f4839d00719f1..b3c5cf59c9704c6ede2f983562f75234588fde3f 100644
--- a/test/serve/js/slider-test.js
+++ b/test/serve/js/slider-test.js
@@ -63,774 +63,15 @@
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 41);
+/******/ 	return __webpack_require__(__webpack_require__.s = 8);
 /******/ })
 /************************************************************************/
 /******/ ({
 
-/***/ 0:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-    if (typeof window['gv'] == 'undefined') {
-        window['gv'] = {};
-    }
-    var parts = namespace.split('.');
-    var nameSpace = window['gv'];
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-        nameSpace = nameSpace[parts[i]];
-    }
-    return nameSpace;
-}
-provide('util');
-window['gv'].util.provide = provide;
-exports.default = provide;
-
-
-/***/ }),
-
-/***/ 1:
+/***/ 8:
 /***/ (function(module, exports) {
 
-module.exports = $;
-
-/***/ }),
-
-/***/ 22:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = __webpack_require__(0);
-var $ = __webpack_require__(1);
-var nm = provide_1.default('collections');
-var TipPresets = (function () {
-    function TipPresets(conf) {
-        this.label = conf.label;
-        this.presets = conf.presets;
-        this.domId = this.label.replace(/ /g, '').toLowerCase();
-        var theSum = 0;
-        for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {
-            var pr = _a[_i];
-            theSum += pr.value;
-        }
-        if (theSum != 100) {
-            throw 'preset sum does note equal 100';
-        }
-    }
-    return TipPresets;
-}());
-var _Slider = (function () {
-    /**
-     * Slider constructor
-     * @param sliderConfig - the configuration
-
-     */
-    function _Slider(sliderConfig) {
-        this._dropdownSelection = null;
-        this._weight = null;
-        this.name = sliderConfig.label;
-        this.domId = this.name.toLowerCase().replace(/ /g, '-');
-        this._locked = false;
-        this._min = 0.0;
-        this._max = 100;
-        this.labelLow = null;
-        this.labelHigh = null;
-        this.labelVal = null;
-        this.slider = null;
-        this.chk = null;
-        this.atMin = false;
-        this.atMax = false;
-        var sel = "<select class=\"" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + "\" id=\"" + this.domId + "_chg\">";
-        for (var i = 0; i < sliderConfig.yearOptions.length; i++) {
-            var itm = sliderConfig.yearOptions[i];
-            sel += "<option value=\"" + itm.column + "\">" + itm.label + "</option>";
-        }
-        sel += '</select>';
-        this.selectedParamDefault = this.selectedParam;
-        this.html = '<div class="slider-div">' +
-            ("<label for=\"" + this.domId + "_chk\" class=\"slider-label\">" + this.name + "</label>") +
-            sel + "<br>" +
-            ("<input id=\"" + this.domId + "_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">") +
-            ("<label id=\"" + this.domId + "_low\" class=\"low-high\"></label>") +
-            ("<input id=\"" + this.domId + "\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">") +
-            ("<label id=\"" + this.domId + "_high\" class=\"low-high\"></label>") +
-            ("<label id=\"" + this.domId + "_lbl\" for=\"" + this.domId + "\" class=\"percent-label\"></label></div>");
-    }
-    /**
-     * add html to dom
-     * @param {jQuery} $container - container element
-     */
-    _Slider.prototype.addToDom = function ($container) {
-        $container.append(this.html);
-        this.labelLow = $("#" + this.domId + "_low");
-        this.labelHigh = $("#" + this.domId + "_high");
-        this.labelVal = $("#" + this.domId + "_lbl");
-        this.slider = $("#" + this.domId);
-        this.selectionBox = $("#" + this.domId + "_chg");
-        this.chk = $("#" + this.domId + "_chk");
-    };
-    /**
-     * increment the slider
-     * @param {number} delta change delta
-     * @returns {number} the remainder not able to be allocated to this slider
-     */
-    _Slider.prototype.increment = function (delta) {
-        var remainder = 0;
-        delta = Number(delta.toFixed(1));
-        this._weight += delta;
-        if (this._weight < this._min) {
-            remainder = this._min - this._weight;
-            this._weight = this._min;
-            this.atMin = true;
-        }
-        else if (this._weight > this._max) {
-            remainder = this._max - this._weight;
-            this._weight = this._max;
-            this.atMax = true;
-        }
-        else {
-            this.atMin = false;
-            this.atMax = false;
-        }
-        this.slider.val(this._weight.toFixed(1));
-        this.labelVal.html(this._weight.toFixed(1) + '%');
-        return remainder;
-    };
-    /**
-     * set the value and drop down
-     * @param {number} newVal the new value
-     * @param {string} selectedParam the selected parameter
-     */
-    _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) {
-        this.min = 0;
-        this.max = 100;
-        this.weight = newVal;
-        this.slider.val(newVal.toFixed(1));
-        this.selectionBox.val(selectedParam);
-        this.selectedParam = selectedParam;
-        this.locked = true;
-    };
-    Object.defineProperty(_Slider.prototype, "locked", {
-        /**
-         *
-         * @returns {boolean} if locked
-         */
-        get: function () {
-            return this._locked;
-        },
-        /**
-         *
-         * @param {boolean} val if locked
-         */
-        set: function (val) {
-            this._locked = val;
-            this.slider.prop('disabled', this._locked);
-            this.selectionBox.prop('disabled', this._locked);
-            this.chk.prop('checked', !this._locked);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "min", {
-        /**
-         *
-         * @returns {number} the minimum
-         */
-        get: function () {
-            return this._min;
-        },
-        /**
-         *
-         * @param {number} newVal new minimum
-         */
-        set: function (newVal) {
-            this._min = Number(newVal.toFixed(1));
-            if (this._min < 0) {
-                this._min = 0;
-            }
-            this.labelLow.html(this._min.toFixed(1));
-            this.slider.attr('min', this._min.toFixed(1));
-            this.atMin = this._weight == this._min;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "max", {
-        /**
-         *
-         * @returns {number} the maximum
-         */
-        get: function () {
-            return this._max;
-        },
-        /**
-         *
-         * @param {number} newVal the maximum
-         */
-        set: function (newVal) {
-            this._max = Number(newVal.toFixed(1));
-            if (this._max > 100) {
-                this._max = 100.0;
-            }
-            this.labelHigh.html(this._max.toFixed(1));
-            this.slider.attr('max', this._max.toFixed(1));
-            this.atMax = this._weight == this._max;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "weight", {
-        /**
-         *
-         * @returns {number} the weight
-         */
-        get: function () {
-            return this._weight;
-        },
-        /**
-         *
-         * @param {number} newVal the weight
-         */
-        set: function (newVal) {
-            this._weight = Number(newVal.toFixed(1));
-            this.labelVal.html(this._weight.toFixed(1) + '%');
-            if (this._weight <= this._min) {
-                this.atMin = true;
-                this.atMax = false;
-            }
-            else if (this._weight >= this._max) {
-                this.atMin = false;
-                this.atMax = true;
-            }
-            else {
-                this.atMin = false;
-                this.atMax = false;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return _Slider;
-}());
-nm._Slider = _Slider;
-/**
- * class to keep track of the sliders
- */
-var TipSliders = (function () {
-    /**
-     *
-     * @param sliderConfigs
-     * @param presetConfig
-     * @param divId
-     * @param presetSelector
-     * @param regionSelector
-     * @param versionSelector
-     * @param chgCallback
-     */
-    function TipSliders(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) {
-        var _this = this;
-        this.resetting = false;
-        this.reservedPercent = 0.0;
-        this.$container = $('#' + divId);
-        this.$container.addClass('slider-container');
-        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { };
-        this._$presetSelector = presetSelector;
-        this._$regionSelector = regionSelector;
-        this._$versionSelector = versionSelector;
-        this._sliderList = [];
-        this._sliderLookup = {};
-        for (var i = 0; i < sliderConfigs.length; i++) {
-            var sld = new _Slider(sliderConfigs[i]);
-            this._sliderList.push(sld);
-            this._sliderLookup[sld.domId] = sld;
-            sld.addToDom(this.$container);
-        }
-        this._presetArray = [];
-        this._presetLookup = {};
-        for (var i = 0; i < presetConfig.length; i++) {
-            var preset = new TipPresets(presetConfig[i]);
-            var idx = (i + 1).toFixed();
-            this._presetLookup[idx] = preset;
-            this._presetArray.push(preset);
-            this._$presetSelector.append("<option value=\"" + idx + "\">" + preset.label + "</option>");
-        }
-        this._lockedList = [];
-        this._inRangeList = [];
-        this._atMinList = [];
-        this._atMaxList = [];
-        this.lockedCount = 10;
-        this.notLockedCount = 0;
-        this._splitSliderArray();
-        this._$presetSelector.change(function () {
-            _this.setPresetValues();
-            _this._runChangedCallback();
-        });
-        this._$regionSelector.change(function () {
-            _this._runChangedCallback();
-        });
-        this._$versionSelector.change(function () {
-            _this._runChangedCallback();
-        });
-        this._$presetSelector.trigger('change');
-        this._addEventListeners();
-    }
-    TipSliders.prototype._runChangedCallback = function () {
-        this._changedCallback(this.paramWeightsRegionVersion);
-    };
-    Object.defineProperty(TipSliders.prototype, "changedCallback", {
-        get: function () {
-            return this._changedCallback;
-        },
-        set: function (chg) {
-            this._changedCallback = chg;
-            this._runChangedCallback();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    TipSliders.prototype.setPresetValues = function () {
-        var idx = this._$presetSelector.val() || '1';
-        var thePreset = this._presetLookup[idx];
-        for (var i = 0; i < thePreset.presets.length; i++) {
-            var presetValues = thePreset.presets[i];
-            var theSlider = this._sliderList[i];
-            theSlider.locked = true;
-            theSlider.setValAndDropDown(presetValues.value, presetValues.column);
-        }
-    };
-    /**
-     * split array into subarrays holding the sliders
-     * @private
-     */
-    TipSliders.prototype._splitSliderArray = function () {
-        this._lockedList = [];
-        this._inRangeList = [];
-        this._atMinList = [];
-        this._atMaxList = [];
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
-            if (sld.locked) {
-                this._lockedList.push(sld);
-            }
-            else if (sld.atMin) {
-                this._atMinList.push(sld);
-            }
-            else if (sld.atMax) {
-                this._atMaxList.push(sld);
-            }
-            else {
-                this._inRangeList.push(sld);
-            }
-        }
-        this.lockedCount = this._lockedList.length;
-        this.notLockedCount = this._sliderList.length - this.lockedCount;
-    };
-    /**
-     * handle remainder, recursive to take care of min max overshoots
-     * @param {number} remain the remainder
-     * @param {string} skipDomId - this dom id
-     * @private
-     */
-    TipSliders.prototype._handleRemainder = function (remain, skipDomId) {
-        remain = Number(remain.toFixed(1));
-        if (remain == 0) {
-            return;
-        }
-        this._splitSliderArray();
-        var canChangeArray = [];
-        for (var i = 0; i < this._inRangeList.length; i++) {
-            var sld = this._inRangeList[i];
-            if (sld.domId == skipDomId) {
-                continue;
-            }
-            canChangeArray.push(sld);
-        }
-        if (remain > 0) {
-            for (var i = 0; i < this._atMaxList.length; i++) {
-                var sld = this._atMaxList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        }
-        else {
-            for (var i = 0; i < this._atMinList.length; i++) {
-                var sld = this._atMinList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        }
-        if (canChangeArray.length == 0) {
-            return;
-        }
-        var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
-        var newRemainder = 0;
-        for (var i = 0; i < canChangeArray.length; i++) {
-            newRemainder += canChangeArray[i].increment(inc);
-        }
-        this._handleRemainder(newRemainder, skipDomId);
-    };
-    /**
-     *
-     * @param {object} keyValList key and value list
-     */
-    TipSliders.prototype.setValues = function (keyValList) {
-        this.resetting = true;
-        for (var k in keyValList) {
-            if (keyValList.hasOwnProperty(k)) {
-                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
-            }
-        }
-        this.resetting = false;
-    };
-    /**
-     * get the weight sum
-     * @returns {number} the weight sum
-     */
-    TipSliders.prototype.getSum = function () {
-        var total = 0;
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
-            total += Number(sld.weight.toFixed(1));
-        }
-        return total;
-    };
-    /**
-     * get the parameter weights
-     * @returns {object} lookup with parameter weights
-     */
-    TipSliders.prototype.getParams = function () {
-        var paramWeights = {};
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
-            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
-        }
-        return paramWeights;
-    };
-    TipSliders.prototype._addEventListeners = function () {
-        var ___this = this;
-        //change function
-        this.$container.find('input[type="range"]').change(function () {
-            if (___this.resetting) {
-                return;
-            }
-            var $this = $(this);
-            var domId = this['id'];
-            var sldr = ___this._sliderLookup[domId];
-            var newValue = parseFloat($this.val());
-            var oldValue = sldr.weight;
-            var diff = newValue - oldValue;
-            diff = Number(diff.toFixed(1));
-            sldr.weight = Number(newValue.toFixed(1));
-            ___this._handleRemainder(diff, domId);
-            //cleanup, make sure the sum is still 100
-            var sum = Number(___this.getSum().toFixed(1));
-            if (sum > 100) {
-                loop1: while (true) {
-                    for (var i = 0; i < ___this._sliderList.length; i++) {
-                        var sld = ___this._sliderList[i];
-                        if (sld.domId == domId || sld.locked || sld.atMin) {
-                            continue;
-                        }
-                        sld.increment(-0.1);
-                        sum -= 0.1;
-                        if (sum.toFixed(1) == '100.0') {
-                            break loop1;
-                        }
-                    }
-                }
-            }
-            else if (sum < 100) {
-                loop1: while (true) {
-                    for (var i = 0; i < ___this._sliderList.length; i++) {
-                        var sld = ___this._sliderList[i];
-                        if (sld.domId == domId || sld.locked || sld.atMax) {
-                            continue;
-                        }
-                        sld.increment(0.1);
-                        sum += 0.1;
-                        if (sum.toFixed(1) == '100.0') {
-                            break loop1;
-                        }
-                    }
-                }
-            }
-            ___this._$presetSelector.val('0');
-            ___this._runChangedCallback();
-        });
-        //update the selected parameter when the selection is changed
-        $('.show-select').change(function () {
-            if (___this.resetting) {
-                return;
-            }
-            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
-            ___this._$presetSelector.val('0');
-            ___this._runChangedCallback();
-        });
-        //lock the slider and update the reserved percent
-        this.$container.find('input[type="checkbox"]').change(function () {
-            var domEl = this;
-            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
-            ___this.reservedPercent = 0.0;
-            ___this.notLockedCount = 0;
-            var notLockedSliders = [];
-            for (var i = 0; i < ___this._sliderList.length; i++) {
-                var sld = ___this._sliderList[i];
-                if (sld.locked) {
-                    ___this.reservedPercent += sld.weight;
-                    continue;
-                }
-                notLockedSliders.push(sld);
-                ___this.notLockedCount++;
-            }
-            for (var i = 0; i < ___this._sliderList.length; i++) {
-                var sld = ___this._sliderList[i];
-                if (sld.locked) {
-                    continue;
-                }
-                sld.max = 100 - ___this.reservedPercent;
-            }
-            if (notLockedSliders.length == 1) {
-                notLockedSliders[0].min = notLockedSliders[0].weight;
-            }
-            else {
-                for (var i = 0; i < notLockedSliders.length; i++) {
-                    notLockedSliders[i].min = 0;
-                }
-            }
-        });
-    };
-    Object.defineProperty(TipSliders.prototype, "paramWeightsRegionVersion", {
-        get: function () {
-            return { paramWeights: this.getParams(),
-                region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return TipSliders;
-}());
-exports.TipSliders = TipSliders;
-nm.Sliders = TipSliders;
-exports.default = TipSliders;
-
-
-/***/ }),
-
-/***/ 41:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Created by gavorhes on 6/22/2016.
- */
-var Sliders_1 = __webpack_require__(22);
-var $ = __webpack_require__(1);
-__webpack_require__(1);
-exports.tipConfig = {
-    $loadingGif: $('#loading-gif'),
-    $presetSelector: $('#preset-selector'),
-    $regionSelector: $('#region-selector'),
-    $versionSelector: $('#version-selector'),
-    tipSegmentLayerMinZoom: 10,
-    slidersConfig: [
-        {
-            label: 'AADT',
-            yearOptions: [
-                { label: '1', column: 'aadtyr_1' }
-            ]
-        },
-        {
-            label: 'AADT Future',
-            yearOptions: [
-                { label: '5', column: 'aadtyr_5' },
-                { label: '10', column: 'aadtyr_10' },
-                { label: '15', column: 'aadtyr_15' },
-                { label: '20', column: 'aadtyr_20' }
-            ]
-        },
-        {
-            label: 'Growth',
-            yearOptions: [
-                { label: '5', column: 'growth_5' },
-                { label: '10', column: 'growth_10' },
-                { label: '15', column: 'growth_15' },
-                { label: '20', column: 'growth_20' }
-            ]
-        },
-        {
-            label: 'Truck',
-            yearOptions: [
-                { label: '1', column: 'trkdyr_1' },
-                { label: '20', column: 'trkdyr_20' }
-            ]
-        },
-        {
-            label: 'LOS',
-            yearOptions: [
-                { label: '1', column: 'losyr_1' }
-            ]
-        },
-        {
-            label: 'LOS Future',
-            yearOptions: [
-                { label: '5', column: 'losyr_5' },
-                { label: '10', column: 'losyr_10' },
-                { label: '15', column: 'losyr_15' },
-                { label: '20', column: 'losyr_20' }
-            ]
-        },
-        {
-            label: 'Crash Rate',
-            yearOptions: [
-                { label: 1, column: 'crash_rate' }
-            ]
-        },
-        {
-            label: 'Severity',
-            yearOptions: [
-                { label: 1, column: 'crash_severity' }
-            ]
-        },
-        {
-            label: 'Weather',
-            yearOptions: [
-                { label: 1, column: 'weather' }
-            ]
-        },
-        {
-            label: 'Event',
-            yearOptions: [
-                { label: 1, column: 'event' }
-            ]
-        }
-    ],
-    presetConfig: [
-        {
-            label: 'Default TIP',
-            presets: [
-                { column: 'aadtyr_1', value: 10.0 },
-                { column: 'aadtyr_20', value: 7.0 },
-                { column: 'growth_20', value: 7.0 },
-                { column: 'trkdyr_1', value: 4.0 },
-                { column: 'losyr_1', value: 12.0 },
-                { column: 'losyr_20', value: 12.0 },
-                { column: 'crash_rate', value: 15.0 },
-                { column: 'crash_severity', value: 13.0 },
-                { column: 'weather', value: 9.0 },
-                { column: 'event', value: 11.0 }
-            ]
-        },
-        {
-            label: 'Safety',
-            presets: [
-                { column: 'aadtyr_1', value: 20.0 },
-                { column: 'aadtyr_20', value: 0.0 },
-                { column: 'growth_20', value: 0.0 },
-                { column: 'trkdyr_1', value: 0.0 },
-                { column: 'losyr_1', value: 0.0 },
-                { column: 'losyr_20', value: 0.0 },
-                { column: 'crash_rate', value: 40.0 },
-                { column: 'crash_severity', value: 40.0 },
-                { column: 'weather', value: 0.0 },
-                { column: 'event', value: 0.0 }
-            ]
-        },
-        {
-            label: 'Mobility Present',
-            presets: [
-                { column: 'aadtyr_1', value: 25.0 },
-                { column: 'aadtyr_20', value: 25.0 },
-                { column: 'growth_20', value: 0.0 },
-                { column: 'trkdyr_1', value: 25.0 },
-                { column: 'losyr_1', value: 25.0 },
-                { column: 'losyr_20', value: 0.0 },
-                { column: 'crash_rate', value: 0.0 },
-                { column: 'crash_severity', value: 0.0 },
-                { column: 'weather', value: 0.0 },
-                { column: 'event', value: 0.0 }
-            ]
-        },
-        {
-            label: 'Mobility Future',
-            presets: [
-                { column: 'aadtyr_1', value: 0.0 },
-                { column: 'aadtyr_20', value: 25.0 },
-                { column: 'growth_20', value: 25.0 },
-                { column: 'trkdyr_1', value: 25.0 },
-                { column: 'losyr_1', value: 0.0 },
-                { column: 'losyr_20', value: 25.0 },
-                { column: 'crash_rate', value: 0.0 },
-                { column: 'crash_severity', value: 0.0 },
-                { column: 'weather', value: 0.0 },
-                { column: 'event', value: 0.0 }
-            ]
-        },
-        {
-            label: 'Service',
-            presets: [
-                { column: 'aadtyr_1', value: 30.0 },
-                { column: 'aadtyr_20', value: 0.0 },
-                { column: 'growth_20', value: 10.0 },
-                { column: 'trkdyr_1', value: 0.0 },
-                { column: 'losyr_1', value: 30.0 },
-                { column: 'losyr_20', value: 30.0 },
-                { column: 'crash_rate', value: 0.0 },
-                { column: 'crash_severity', value: 0.0 },
-                { column: 'weather', value: 0.0 },
-                { column: 'event', value: 0.0 }
-            ]
-        },
-        {
-            label: 'Freight Performance',
-            presets: [
-                { column: 'aadtyr_1', value: 20.0 },
-                { column: 'aadtyr_20', value: 0.0 },
-                { column: 'growth_20', value: 0.0 },
-                { column: 'trkdyr_1', value: 60.0 },
-                { column: 'losyr_1', value: 20.0 },
-                { column: 'losyr_20', value: 0.0 },
-                { column: 'crash_rate', value: 0.0 },
-                { column: 'crash_severity', value: 0.0 },
-                { column: 'weather', value: 0.0 },
-                { column: 'event', value: 0.0 }
-            ]
-        }
-    ]
-};
-exports.tipConfig.$presetSelector.append('<option value="0" disabled=>Custom</option>');
-var sliders = new Sliders_1.TipSliders(exports.tipConfig.slidersConfig, exports.tipConfig.presetConfig, 'slider-container', exports.tipConfig.$presetSelector, exports.tipConfig.$regionSelector, exports.tipConfig.$regionSelector, function (chg) { console.log(chg); });
-// sliders.changedCallback = (chg) => {console.log(chg)};
-window['glob'] = sliders;
-window['hat'] = sliders;
-window['bird'] = sliders;
-
+throw new Error("Module build failed: Error: Typescript emitted no output for C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\test\\demo\\slider-test.ts.\n    at Object.loader (C:\\Users\\glenn\\PycharmProjects\\webmapsjs\\node_modules\\ts-loader\\dist\\index.js:32:15)");
 
 /***/ })
 
diff --git a/test/serve/js/slider-test.js.map b/test/serve/js/slider-test.js.map
index 85fb21d41708f962e431d0fd6528c883ffcea000..d4e8e3d50067ca8076d7e6474cd17ef93af8fe4c 100644
--- a/test/serve/js/slider-test.js.map
+++ b/test/serve/js/slider-test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9a51dbae0065f53e7cbb?9e83*****","webpack:///./src/util/provide.ts?5c82*****","webpack:///external \"$\"?57aa*****","webpack:///./src/collections/Sliders.ts","webpack:///./test/demo/slider-test.ts"],"names":[],"mappings":"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","file":"slider-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 41);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9a51dbae0065f53e7cbb","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window['gv'] == 'undefined'){\r\n        window['gv'] = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window['gv'];\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/provide.ts","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections');\r\n\r\nexport interface TipSliderConfig {\r\n    label: string;\r\n    yearOptions: Array<{column: string, label: string}>\r\n}\r\n\r\nexport interface TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>\r\n}\r\n\r\nexport interface ChangeResponse{\r\n    paramWeights: Object;\r\n    region: string;\r\n    mmVersion: string;\r\n}\r\n\r\nexport interface ChangeCallback{\r\n    (chg: ChangeResponse): any\r\n}\r\n\r\n\r\nclass TipPresets implements TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>;\r\n    domId: string;\r\n\r\n    constructor(conf: TipPresetConfig) {\r\n        this.label = conf.label;\r\n        this.presets = conf.presets;\r\n        this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n\r\n        let theSum = 0;\r\n\r\n        for (let pr of this.presets){\r\n            theSum += pr.value;\r\n        }\r\n\r\n        if (theSum != 100){\r\n            throw 'preset sum does note equal 100';\r\n        }\r\n    }\r\n}\r\n\r\n\r\nclass _Slider {\r\n    _min: number;\r\n    _max: number;\r\n    _locked: boolean;\r\n    atMin: boolean;\r\n    atMax: boolean;\r\n    _weightDefault: number;\r\n    _weight: number;\r\n    html: string;\r\n    domId: string;\r\n    name: string;\r\n\r\n    labelLow: JQuery;\r\n    labelHigh: JQuery;\r\n    labelVal: JQuery;\r\n    slider: JQuery;\r\n    selectionBox: JQuery;\r\n    chk: JQuery;\r\n\r\n    selectedParam: any;\r\n    selectedParamDefault: any;\r\n    _dropdownSelection: string;\r\n\r\n    /**\r\n     * Slider constructor\r\n     * @param sliderConfig - the configuration\r\n\r\n     */\r\n    constructor(sliderConfig: TipSliderConfig) {\r\n        this._dropdownSelection = null;\r\n        this._weight = null;\r\n        this.name = sliderConfig.label;\r\n        this.domId = this.name.toLowerCase().replace(/ /g, '-');\r\n\r\n        this._locked = false;\r\n\r\n        this._min = 0.0;\r\n        this._max = 100;\r\n\r\n        this.labelLow = null;\r\n        this.labelHigh = null;\r\n        this.labelVal = null;\r\n        this.slider = null;\r\n        this.chk = null;\r\n\r\n        this.atMin = false;\r\n        this.atMax = false;\r\n\r\n\r\n        let sel = `<select class=\"${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}\" id=\"${this.domId}_chg\">`;\r\n\r\n        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n            let itm = sliderConfig.yearOptions[i];\r\n            sel += `<option value=\"${itm.column}\">${itm.label}</option>`;\r\n        }\r\n        sel += '</select>';\r\n\r\n        this.selectedParamDefault = this.selectedParam;\r\n\r\n        this.html = '<div class=\"slider-div\">' +\r\n            `<label for=\"${this.domId}_chk\" class=\"slider-label\">${this.name}</label>` +\r\n            sel + `<br>` +\r\n            `<input id=\"${this.domId}_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">` +\r\n            `<label id=\"${this.domId}_low\" class=\"low-high\"></label>` +\r\n            `<input id=\"${this.domId}\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">` +\r\n            `<label id=\"${this.domId}_high\" class=\"low-high\"></label>` +\r\n            `<label id=\"${this.domId}_lbl\" for=\"${this.domId}\" class=\"percent-label\"></label></div>`;\r\n    }\r\n\r\n    /**\r\n     * add html to dom\r\n     * @param {jQuery} $container - container element\r\n     */\r\n    addToDom($container) {\r\n        $container.append(this.html);\r\n        this.labelLow = $(`#${this.domId}_low`);\r\n        this.labelHigh = $(`#${this.domId}_high`);\r\n        this.labelVal = $(`#${this.domId}_lbl`);\r\n        this.slider = $(`#${this.domId}`);\r\n        this.selectionBox = $(`#${this.domId}_chg`);\r\n        this.chk = $(`#${this.domId}_chk`);\r\n    }\r\n\r\n    /**\r\n     * increment the slider\r\n     * @param {number} delta change delta\r\n     * @returns {number} the remainder not able to be allocated to this slider\r\n     */\r\n    increment(delta) {\r\n        let remainder = 0;\r\n        delta = Number(delta.toFixed(1));\r\n\r\n        this._weight += delta;\r\n        if (this._weight < this._min) {\r\n            remainder = this._min - this._weight;\r\n            this._weight = this._min;\r\n            this.atMin = true;\r\n        } else if (this._weight > this._max) {\r\n            remainder = this._max - this._weight;\r\n            this._weight = this._max;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n\r\n        this.slider.val(this._weight.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n\r\n        return remainder;\r\n    }\r\n\r\n    /**\r\n     * set the value and drop down\r\n     * @param {number} newVal the new value\r\n     * @param {string} selectedParam the selected parameter\r\n     */\r\n    setValAndDropDown(newVal: number, selectedParam: string) {\r\n        this.min = 0;\r\n        this.max = 100;\r\n        this.weight = newVal;\r\n        this.slider.val(newVal.toFixed(1));\r\n        this.selectionBox.val(selectedParam);\r\n        this.selectedParam = selectedParam;\r\n        this.locked = true;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {boolean} if locked\r\n     */\r\n    get locked() {\r\n        return this._locked;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {boolean} val if locked\r\n     */\r\n    set locked(val) {\r\n        this._locked = val;\r\n        this.slider.prop('disabled', this._locked);\r\n        this.selectionBox.prop('disabled', this._locked);\r\n        this.chk.prop('checked', !this._locked);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the minimum\r\n     */\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal new minimum\r\n     */\r\n    set min(newVal) {\r\n        this._min = Number(newVal.toFixed(1));\r\n        if (this._min < 0) {\r\n            this._min = 0;\r\n        }\r\n        this.labelLow.html(this._min.toFixed(1));\r\n        this.slider.attr('min', this._min.toFixed(1));\r\n        this.atMin = this._weight == this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the maximum\r\n     */\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the maximum\r\n     */\r\n    set max(newVal) {\r\n        this._max = Number(newVal.toFixed(1));\r\n        if (this._max > 100) {\r\n            this._max = 100.0;\r\n        }\r\n        this.labelHigh.html(this._max.toFixed(1));\r\n        this.slider.attr('max', this._max.toFixed(1));\r\n        this.atMax = this._weight == this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the weight\r\n     */\r\n    get weight() {\r\n        return this._weight;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the weight\r\n     */\r\n    set weight(newVal) {\r\n        this._weight = Number(newVal.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n        if (this._weight <= this._min) {\r\n            this.atMin = true;\r\n            this.atMax = false;\r\n        } else if (this._weight >= this._max) {\r\n            this.atMin = false;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n    }\r\n}\r\n\r\nnm._Slider = _Slider;\r\n\r\n\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nexport class TipSliders {\r\n    $container: JQuery;\r\n    reservedPercent: number;\r\n    lockedCount: number;\r\n    notLockedCount: number;\r\n    private _sliderList: Array<_Slider>;\r\n    private _sliderLookup: {[s: string]: _Slider};\r\n    private resetting: boolean;\r\n    private _changedCallback: ChangeCallback;\r\n\r\n    private _lockedList: Array<_Slider>;\r\n    private _inRangeList: Array<_Slider>;\r\n    private _atMinList: Array<_Slider>;\r\n    private _atMaxList: Array<_Slider>;\r\n\r\n    private _presetArray: Array<TipPresets>;\r\n    private _presetLookup: {[s: string]: TipPresets};\r\n\r\n    private _$presetSelector: JQuery;\r\n    private _$regionSelector: JQuery;\r\n    private _$versionSelector: JQuery;\r\n\r\n    /**\r\n     *\r\n     * @param sliderConfigs\r\n     * @param presetConfig\r\n     * @param divId\r\n     * @param presetSelector\r\n     * @param regionSelector\r\n     * @param versionSelector\r\n     * @param chgCallback\r\n     */\r\n    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,\r\n                divId: string, presetSelector: JQuery, regionSelector: JQuery, versionSelector: JQuery,\r\n                chgCallback?: ChangeCallback) {\r\n\r\n        this.resetting = false;\r\n        this.reservedPercent = 0.0;\r\n        this.$container = $('#' + divId);\r\n        this.$container.addClass('slider-container');\r\n\r\n        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};\r\n\r\n        this._$presetSelector = presetSelector;\r\n        this._$regionSelector = regionSelector;\r\n        this._$versionSelector = versionSelector;\r\n\r\n        this._sliderList = [];\r\n        this._sliderLookup = {};\r\n\r\n        for (let i = 0; i < sliderConfigs.length; i++) {\r\n            let sld = new _Slider(sliderConfigs[i]);\r\n            this._sliderList.push(sld);\r\n            this._sliderLookup[sld.domId] = sld;\r\n            sld.addToDom(this.$container);\r\n        }\r\n\r\n        this._presetArray = [];\r\n        this._presetLookup = {};\r\n\r\n        for (let i = 0; i < presetConfig.length; i++) {\r\n            let preset = new TipPresets(presetConfig[i]);\r\n\r\n            let idx = (i + 1).toFixed();\r\n\r\n            this._presetLookup[idx] = preset;\r\n            this._presetArray.push(preset);\r\n            this._$presetSelector.append(`<option value=\"${idx}\">${preset.label}</option>`);\r\n        }\r\n\r\n\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        this.lockedCount = 10;\r\n        this.notLockedCount = 0;\r\n\r\n        this._splitSliderArray();\r\n\r\n\r\n        this._$presetSelector.change(() => {\r\n            this.setPresetValues();\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$regionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$versionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$presetSelector.trigger('change');\r\n\r\n        this._addEventListeners();\r\n    }\r\n\r\n    _runChangedCallback(){\r\n        this._changedCallback(this.paramWeightsRegionVersion);\r\n    }\r\n\r\n    get changedCallback(): ChangeCallback{\r\n        return this._changedCallback\r\n    }\r\n\r\n    set changedCallback(chg: ChangeCallback){\r\n        this._changedCallback = chg;\r\n        this._runChangedCallback();\r\n    }\r\n\r\n    setPresetValues() {\r\n        let idx = this._$presetSelector.val() || '1';\r\n\r\n        let thePreset = this._presetLookup[idx];\r\n\r\n        for (let i = 0; i < thePreset.presets.length; i++) {\r\n            let presetValues = thePreset.presets[i];\r\n            let theSlider = this._sliderList[i];\r\n\r\n            theSlider.locked = true;\r\n            theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * split array into subarrays holding the sliders\r\n     * @private\r\n     */\r\n    _splitSliderArray() {\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n\r\n            if (sld.locked) {\r\n                this._lockedList.push(sld);\r\n            } else if (sld.atMin) {\r\n                this._atMinList.push(sld);\r\n            } else if (sld.atMax) {\r\n                this._atMaxList.push(sld);\r\n            } else {\r\n                this._inRangeList.push(sld);\r\n            }\r\n        }\r\n        this.lockedCount = this._lockedList.length;\r\n        this.notLockedCount = this._sliderList.length - this.lockedCount;\r\n    }\r\n\r\n    /**\r\n     * handle remainder, recursive to take care of min max overshoots\r\n     * @param {number} remain the remainder\r\n     * @param {string} skipDomId - this dom id\r\n     * @private\r\n     */\r\n    _handleRemainder(remain, skipDomId) {\r\n\r\n        remain = Number(remain.toFixed(1));\r\n        if (remain == 0) {\r\n            return;\r\n        }\r\n\r\n        this._splitSliderArray();\r\n\r\n        let canChangeArray = [];\r\n        for (let i = 0; i < this._inRangeList.length; i++) {\r\n            let sld = this._inRangeList[i];\r\n            if (sld.domId == skipDomId) {\r\n                continue;\r\n            }\r\n            canChangeArray.push(sld);\r\n        }\r\n\r\n        if (remain > 0) {\r\n            for (let i = 0; i < this._atMaxList.length; i++) {\r\n                let sld = this._atMaxList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < this._atMinList.length; i++) {\r\n                let sld = this._atMinList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        }\r\n\r\n        if (canChangeArray.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n\r\n        let newRemainder = 0;\r\n        for (let i = 0; i < canChangeArray.length; i++) {\r\n            newRemainder += canChangeArray[i].increment(inc);\r\n        }\r\n\r\n        this._handleRemainder(newRemainder, skipDomId);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} keyValList key and value list\r\n     */\r\n    setValues(keyValList) {\r\n        this.resetting = true;\r\n        for (let k in keyValList) {\r\n            if (keyValList.hasOwnProperty(k)) {\r\n                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);\r\n            }\r\n        }\r\n        this.resetting = false;\r\n    }\r\n\r\n    /**\r\n     * get the weight sum\r\n     * @returns {number} the weight sum\r\n     */\r\n    getSum() {\r\n        let total = 0;\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            total += Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return total;\r\n    }\r\n\r\n    /**\r\n     * get the parameter weights\r\n     * @returns {object} lookup with parameter weights\r\n     */\r\n    getParams() {\r\n        let paramWeights = {};\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return paramWeights;\r\n    }\r\n\r\n    _addEventListeners() {\r\n        let ___this = this;\r\n\r\n\r\n        //change function\r\n        this.$container.find('input[type=\"range\"]').change(function () {\r\n                if (___this.resetting) {\r\n                    return;\r\n                }\r\n\r\n                let $this = $(this);\r\n                let domId = this['id'];\r\n                let sldr = ___this._sliderLookup[domId];\r\n\r\n                let newValue = parseFloat($this.val());\r\n\r\n                let oldValue = sldr.weight;\r\n                let diff = newValue - oldValue;\r\n                diff = Number(diff.toFixed(1));\r\n\r\n                sldr.weight = Number(newValue.toFixed(1));\r\n\r\n                ___this._handleRemainder(diff, domId);\r\n\r\n                //cleanup, make sure the sum is still 100\r\n                let sum = Number(___this.getSum().toFixed(1));\r\n\r\n                if (sum > 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMin) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(-0.1);\r\n                                sum -= 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                } else if (sum < 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMax) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(0.1);\r\n                                sum += 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n\r\n                ___this._$presetSelector.val('0');\r\n                ___this._runChangedCallback();\r\n            }\r\n        );\r\n\r\n        //update the selected parameter when the selection is changed\r\n        $('.show-select').change(function () {\r\n            if (___this.resetting) {\r\n                return;\r\n            }\r\n            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();\r\n\r\n            ___this._$presetSelector.val('0');\r\n\r\n            ___this._runChangedCallback();\r\n\r\n        });\r\n\r\n        //lock the slider and update the reserved percent\r\n        this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n            let domEl = this;\r\n\r\n            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;\r\n            ___this.reservedPercent = 0.0;\r\n            ___this.notLockedCount = 0;\r\n\r\n            let notLockedSliders = [];\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    ___this.reservedPercent += sld.weight;\r\n                    continue;\r\n                }\r\n                notLockedSliders.push(sld);\r\n                ___this.notLockedCount++;\r\n            }\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    continue;\r\n                }\r\n                sld.max = 100 - ___this.reservedPercent;\r\n            }\r\n\r\n            if (notLockedSliders.length == 1) {\r\n                notLockedSliders[0].min = notLockedSliders[0].weight;\r\n            } else {\r\n                for (let i = 0; i < notLockedSliders.length; i++) {\r\n                    notLockedSliders[i].min = 0;\r\n                }\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    get paramWeightsRegionVersion(): ChangeResponse{\r\n        return {paramWeights: this.getParams(),\r\n            region: this._$regionSelector.val() as string, mmVersion: this._$versionSelector.val() as string}\r\n    }\r\n}\r\n\r\nnm.Sliders = TipSliders;\r\nexport default TipSliders;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/Sliders.ts","/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../../src/collections/Sliders';\r\nimport $ = require('jquery');\r\nimport ol = require('custom-ol');\r\nimport 'jquery-ui';\r\n\r\n\r\n\r\nexport interface ITipConfig{\r\n    slidersConfig: Array<TipSliderConfig>;\r\n    presetConfig: Array<TipPresetConfig>;\r\n    tipSegmentLayerMinZoom: number;\r\n    sliders: TipSliders;\r\n    _map: ol.Map;\r\n    $loadingGif: JQuery;\r\n    $presetSelector: JQuery;\r\n    $regionSelector: JQuery;\r\n    $versionSelector: JQuery;\r\n    itsLayerCollection: any;\r\n    tipSegmentLayer: any;\r\n    metamanagerSegments: any;\r\n}\r\n\r\nexport const tipConfig = {\r\n    $loadingGif: $('#loading-gif'),\r\n    $presetSelector: $('#preset-selector'),\r\n    $regionSelector: $('#region-selector'),\r\n    $versionSelector: $('#version-selector'),\r\n    tipSegmentLayerMinZoom: 10,\r\n    slidersConfig: [\r\n            {\r\n                label: 'AADT',\r\n                yearOptions: [\r\n                    {label: '1', column: 'aadtyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'AADT Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'aadtyr_5'},\r\n                    {label: '10', column: 'aadtyr_10'},\r\n                    {label: '15', column: 'aadtyr_15'},\r\n                    {label: '20', column: 'aadtyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Growth',\r\n                yearOptions: [\r\n                    {label: '5', column: 'growth_5'},\r\n                    {label: '10', column: 'growth_10'},\r\n                    {label: '15', column: 'growth_15'},\r\n                    {label: '20', column: 'growth_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Truck',\r\n                yearOptions: [\r\n                    {label: '1', column: 'trkdyr_1'},\r\n                    {label: '20', column: 'trkdyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS',\r\n                yearOptions: [\r\n                    {label: '1', column: 'losyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'losyr_5'},\r\n                    {label: '10', column: 'losyr_10'},\r\n                    {label: '15', column: 'losyr_15'},\r\n                    {label: '20', column: 'losyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Crash Rate',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_rate'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Severity',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_severity'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Weather',\r\n                yearOptions: [\r\n                    {label: 1, column: 'weather'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Event',\r\n                yearOptions: [\r\n                    {label: 1, column: 'event'}\r\n                ]\r\n            }\r\n        ] as Array<TipSliderConfig>,\r\n    presetConfig: [\r\n            {\r\n                label: 'Default TIP',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 10.0},\r\n                    {column: 'aadtyr_20', value: 7.0},\r\n                    {column: 'growth_20', value: 7.0},\r\n                    {column: 'trkdyr_1', value: 4.0},\r\n                    {column: 'losyr_1', value: 12.0},\r\n                    {column: 'losyr_20', value: 12.0},\r\n                    {column: 'crash_rate', value: 15.0},\r\n                    {column: 'crash_severity', value: 13.0},\r\n                    {column: 'weather', value: 9.0},\r\n                    {column: 'event', value: 11.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Safety',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 40.0},\r\n                    {column: 'crash_severity', value: 40.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Present',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 25.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 25.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Future',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 0.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 25.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 25.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Service',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 30.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 10.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 30.0},\r\n                    {column: 'losyr_20', value: 30.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Freight Performance',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 60.0},\r\n                    {column: 'losyr_1', value: 20.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            }\r\n        ] as Array<TipPresetConfig>\r\n\r\n} as ITipConfig;\r\n\r\ntipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\n\r\nlet sliders = new TipSliders(tipConfig.slidersConfig, tipConfig.presetConfig, 'slider-container',\r\n    tipConfig.$presetSelector, tipConfig.$regionSelector, tipConfig.$regionSelector, (chg) => {console.log(chg)});\r\n\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\n\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./test/demo/slider-test.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap 0753a1f6584d4e240ad0"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA","file":"slider-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0753a1f6584d4e240ad0"],"sourceRoot":""}
\ No newline at end of file