diff --git a/dist/_test/animate.d.ts b/dist/_test/animate.d.ts
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a36d40b0da7682ea3a0a9403e2a4a8e492327477 100644
--- a/dist/_test/animate.d.ts
+++ b/dist/_test/animate.d.ts
@@ -0,0 +1 @@
+import 'jquery-ui';
diff --git a/dist/_test/animate.js b/dist/_test/animate.js
index 4399049904c192a34c3ae74d9d5131c6ef7ef8b3..04db4aca55803d30ae4e5138d3657ab7c009385e 100644
--- a/dist/_test/animate.js
+++ b/dist/_test/animate.js
@@ -6,6 +6,7 @@ var media_control_1 = require("../domUtil/media-control");
 var $ = require("jquery");
 var LayerBaseVectorEsri_1 = require("../layers/LayerBaseVectorEsri");
 var LayerEsriMapServer_1 = require("../layers/LayerEsriMapServer");
+require("jquery-ui");
 var nexrhresStatic = new LayerRealEarthTile_1.default({
     products: 'nexrhres',
     id: 'nexrhres-static',
diff --git a/dist/_test/animate.js.map b/dist/_test/animate.js.map
index 8f735532b92b8a68e6460af32b60c9072e7f3ded..1a202769ee2d6b8c53b93d8484e5e02ad90265e2 100644
--- a/dist/_test/animate.js.map
+++ b/dist/_test/animate.js.map
@@ -1 +1 @@
-{"version":3,"file":"animate.js","sourceRoot":"","sources":["../../src/_test/animate.ts"],"names":[],"mappings":";;AAAA,kDAA+C;AAC/C,mEAA8D;AAC9D,0DAAsE;AACtE,0BAA6B;AAC7B,qEAAkE;AAClE,mEAAgE;AAGhE,IAAI,cAAc,GAAG,IAAI,4BAAkB,CAAC;IACpC,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,qBAAqB;IAC3B,eAAe;IACf,gBAAgB,EAAE,UAAU,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACJ,CACJ,CAAC;AAGF,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACnB,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtD,IAAI,KAAK,GAAG,IAAI,4BAAY,CACxB,CAAC,CAAC,UAAU,CAAC,EACb,UAAC,CAAS;IACN,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,EACD;IACI,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,IAAI;CACnB,CACJ,CAAC;AAGF,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AACrB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAGrC,IAAI,iBAAiB,GAAG,IAAI,yCAAmB,CAC3C,0GAA0G,EAC1G;IACI,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEpC,IAAI,cAAc,GAAG;IACjB,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,oCAAoC;IACpC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IACvC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;IAC9C,CAAC,SAAS,EAAE,WAAW,CAAC;CAC3B,CAAC;AAGF,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7C,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,4DAA0D,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAY,EAC1F;QACI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;KACvB,CACJ,CAAC;IACF,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import {quickMap} from '../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\n\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"]}
\ No newline at end of file
+{"version":3,"file":"animate.js","sourceRoot":"","sources":["../../src/_test/animate.ts"],"names":[],"mappings":";;AAAA,kDAA+C;AAC/C,mEAA8D;AAC9D,0DAAsE;AACtE,0BAA6B;AAC7B,qEAAkE;AAClE,mEAAgE;AAChE,qBAAmB;AAGnB,IAAI,cAAc,GAAG,IAAI,4BAAkB,CAAC;IACpC,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,qBAAqB;IAC3B,eAAe;IACf,gBAAgB,EAAE,UAAU,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACJ,CACJ,CAAC;AAGF,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACnB,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtD,IAAI,KAAK,GAAG,IAAI,4BAAY,CACxB,CAAC,CAAC,UAAU,CAAC,EACb,UAAC,CAAS;IACN,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,EACD;IACI,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,IAAI;CACnB,CACJ,CAAC;AAGF,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AACrB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAGrC,IAAI,iBAAiB,GAAG,IAAI,yCAAmB,CAC3C,0GAA0G,EAC1G;IACI,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEpC,IAAI,cAAc,GAAG;IACjB,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,oCAAoC;IACpC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IACvC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;IAC9C,CAAC,SAAS,EAAE,WAAW,CAAC;CAC3B,CAAC;AAGF,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7C,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,4DAA0D,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAY,EAC1F;QACI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;KACvB,CACJ,CAAC;IACF,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import {quickMap} from '../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport 'jquery-ui';\r\n\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"]}
\ No newline at end of file
diff --git a/dist/_test/slider-test.d.ts b/dist/_test/slider-test.d.ts
index 00f47221ab2b637cb33608364e23a52f23bd9425..36ff794f56a8945de7e6d1fbaddb742a8bd072af 100644
--- a/dist/_test/slider-test.d.ts
+++ b/dist/_test/slider-test.d.ts
@@ -5,6 +5,7 @@
  */
 import { TipSliders, TipPresetConfig, TipSliderConfig } from '../collections/Sliders';
 import ol = require('custom-ol');
+import 'jquery-ui';
 export interface ITipConfig {
     slidersConfig: Array<TipSliderConfig>;
     presetConfig: Array<TipPresetConfig>;
diff --git a/dist/_test/slider-test.js b/dist/_test/slider-test.js
index 2b5ed9b4a4a50e309314170442074770fd5c3393..2c4d1ec6af2f90d8e17b5b42c64cd87b09008317 100644
--- a/dist/_test/slider-test.js
+++ b/dist/_test/slider-test.js
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
  */
 var Sliders_1 = require("../collections/Sliders");
 var $ = require("jquery");
+require("jquery-ui");
 exports.tipConfig = {
     $loadingGif: $('#loading-gif'),
     $presetSelector: $('#preset-selector'),
diff --git a/dist/_test/slider-test.js.map b/dist/_test/slider-test.js.map
index 0748d3dbfca2b5e7afd7755851354e12151e037c..d31449aa732b16bd4b3704551f70ff54c749135e 100644
--- a/dist/_test/slider-test.js.map
+++ b/dist/_test/slider-test.js.map
@@ -1 +1 @@
-{"version":3,"file":"slider-test.js","sourceRoot":"","sources":["../../src/_test/slider-test.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,kDAAoF;AACpF,0BAA6B;AAoBhB,QAAA,SAAS,GAAG;IACrB,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC;IAC9B,eAAe,EAAE,CAAC,CAAC,kBAAkB,CAAC;IACtC,eAAe,EAAE,CAAC,CAAC,kBAAkB,CAAC;IACtC,gBAAgB,EAAE,CAAC,CAAC,mBAAmB,CAAC;IACxC,sBAAsB,EAAE,EAAE;IAC1B,aAAa,EAAE;QACP;YACI,KAAK,EAAE,MAAM;YACb,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAC;aACnC;SACJ;QACD;YACI,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAC;gBAChC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;gBAClC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;gBAClC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;aACrC;SACJ;QACD;YACI,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAC;gBAChC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;gBAClC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;gBAClC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;aACrC;SACJ;QACD;YACI,KAAK,EAAE,OAAO;YACd,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAC;gBAChC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAC;aACrC;SACJ;QACD;YACI,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC;aAClC;SACJ;QACD;YACI,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC;gBAC/B,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC;gBACjC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC;gBACjC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC;aACpC;SACJ;QACD;YACI,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAC;aACnC;SACJ;QACD;YACI,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAC;aACvC;SACJ;QACD;YACI,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAC;aAChC;SACJ;QACD;YACI,KAAK,EAAE,OAAO;YACd,WAAW,EAAE;gBACT,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAC;aAC9B;SACJ;KACsB;IAC/B,YAAY,EAAE;QACN;YACI,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC;gBAChC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAC;gBACnC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAC;gBACvC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAC;aACjC;SACJ;QACD;YACI,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAC;gBACnC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAC;gBACvC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;aAChC;SACJ;QACD;YACI,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;gBAClC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC;gBAChC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAC;gBAClC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAC;gBACtC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;aAChC;SACJ;QACD;YACI,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;gBAClC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;gBAClC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAC;gBAClC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAC;gBACtC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;aAChC;SACJ;QACD;YACI,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;gBAClC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC;gBAChC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAC;gBAClC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAC;gBACtC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;aAChC;SACJ;QACD;YACI,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAE;gBACL,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC;gBACjC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAC;gBACjC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC;gBAChC,EAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC;gBAChC,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAC;gBAClC,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAC;gBACtC,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC;gBAC/B,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;aAChC;SACJ;KACsB;CAEpB,CAAC;AAEhB,iBAAS,CAAC,eAAe,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;AAEhF,IAAI,OAAO,GAAG,IAAI,oBAAU,CAAC,iBAAS,CAAC,aAAa,EAAE,iBAAS,CAAC,YAAY,EAAE,kBAAkB,EAC5F,iBAAS,CAAC,eAAe,EAAE,iBAAS,CAAC,eAAe,EAAE,iBAAS,CAAC,eAAe,EAAE,UAAC,GAAG,IAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,CAAA,CAAC,CAAC,CAAC;AAElH,yDAAyD;AAEzD,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AACzB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACxB,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';\r\nimport $ = require('jquery');\r\nimport ol = require('custom-ol');\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"]}
\ No newline at end of file
+{"version":3,"file":"slider-test.js","sourceRoot":"","sources":["../../src/_test/slider-test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../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"]}
\ No newline at end of file
diff --git a/dist/domUtil/day-range.d.ts b/dist/domUtil/day-range.d.ts
index b8068eb481fe4b7915c3897a7130352ab2edc8db..433e01ba6b029d69fa5b264f7dc0f1fe72bd64b8 100644
--- a/dist/domUtil/day-range.d.ts
+++ b/dist/domUtil/day-range.d.ts
@@ -1,5 +1,6 @@
 /// <reference types="jquery" />
 /// <reference types="jqueryui" />
+import 'jquery-ui';
 export declare class DayRange {
     _workingDayRange: number;
     _$startDate: JQuery;
diff --git a/dist/domUtil/day-range.js b/dist/domUtil/day-range.js
index dd98c4c076dfa149a1dc6e766dce4ff2e0c32989..d92f8417c9a127cace324ddfeb923c8def2fb923 100644
--- a/dist/domUtil/day-range.js
+++ b/dist/domUtil/day-range.js
@@ -2,7 +2,7 @@
 Object.defineProperty(exports, "__esModule", { value: true });
 var provide_1 = require("../util/provide");
 var $ = require("jquery");
-// import 'jquery-ui';
+require("jquery-ui");
 var nm = provide_1.default('domUtil');
 var DayRange = (function () {
     /**
diff --git a/dist/domUtil/day-range.js.map b/dist/domUtil/day-range.js.map
index 26079b9f300fe825e57f0e7636d84b2be410c2a6..733e114396a9fff11c0527d6f9c85b488afefd5f 100644
--- a/dist/domUtil/day-range.js.map
+++ b/dist/domUtil/day-range.js.map
@@ -1 +1 @@
-{"version":3,"file":"day-range.js","sourceRoot":"","sources":["../../src/domUtil/day-range.ts"],"names":[],"mappings":"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","sourcesContent":["import provide from '../util/provide';\r\nimport $ = require('jquery');\r\n// import '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"]}
\ No newline at end of file
+{"version":3,"file":"day-range.js","sourceRoot":"","sources":["../../src/domUtil/day-range.ts"],"names":[],"mappings":"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","sourcesContent":["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"]}
\ No newline at end of file
diff --git a/dist/olHelpers/esriToOlStyle.d.ts b/dist/olHelpers/esriToOlStyle.d.ts
index 639b8bd3d12f282a0ef9784ba772e4d624621e1a..3ffc1bcdc2fe9f8defb4b2a86276e5428c324c8e 100644
--- a/dist/olHelpers/esriToOlStyle.d.ts
+++ b/dist/olHelpers/esriToOlStyle.d.ts
@@ -1,4 +1,3 @@
-import ol = require('custom-ol');
 export interface EsriResponse {
     drawingInfo: {
         renderer: EsriRenderer;
@@ -36,7 +35,7 @@ export interface EsriSymbol {
  * @returns {styleAndLegend} style and legend object
  */
 export declare function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse): {
-    style: ol.style.Style | ol.style.Style[] | ol.StyleFunction;
+    style: any;
     legend: string;
 };
 /**
diff --git a/dist/olHelpers/mapInteractionBase.d.ts b/dist/olHelpers/mapInteractionBase.d.ts
index 8dc3285c28b473b6d348b6f36d9e4a9c6d4859ab..97a7a9ad99ac23f79085a4a7cb503b2191bcf325 100644
--- a/dist/olHelpers/mapInteractionBase.d.ts
+++ b/dist/olHelpers/mapInteractionBase.d.ts
@@ -21,7 +21,7 @@ export declare class MapInteractionBase {
      * get reference to the ol map object
      * @returns {ol.Map} the map object
      */
-    readonly map: ol.Map;
+    readonly map: any;
     /**
      * get if is initialized
      * @returns {boolean} is initialized
diff --git a/dist/olHelpers/projections.d.ts b/dist/olHelpers/projections.d.ts
index d4978d5bda07d82ace1ad8f259623ce70b351a2d..d35a4e413667b7f62721fa597a8627b4c0ca3ad5 100644
--- a/dist/olHelpers/projections.d.ts
+++ b/dist/olHelpers/projections.d.ts
@@ -1,7 +1,3 @@
-/**
- * Created by gavorhes on 10/3/2016.
- */
-import ol = require('custom-ol');
-export declare const proj4326: ol.proj.Projection;
-export declare const proj3857: ol.proj.Projection;
-export declare const proj3070: ol.proj.Projection;
+export declare const proj4326: any;
+export declare const proj3857: any;
+export declare const proj3070: any;
diff --git a/dist/olHelpers/propertiesZoomStyle.d.ts b/dist/olHelpers/propertiesZoomStyle.d.ts
index e172c919912ab678a5f1ba77a4224419d1a2c496..fa2e5e59be92d03e45932e71c64077e8a6cc2c44 100644
--- a/dist/olHelpers/propertiesZoomStyle.d.ts
+++ b/dist/olHelpers/propertiesZoomStyle.d.ts
@@ -1,4 +1,3 @@
-import ol = require('custom-ol');
 /**
  * A style function based on properties and zoom level, wraps normal feature, resolution function
  * @callback propertiesZoomStyle
@@ -11,5 +10,5 @@ import ol = require('custom-ol');
  * @param {propertiesZoomStyle|*} styleFunc - style function
  * @returns {function|*} new function
  */
-declare function propertiesZoomStyle(styleFunc: any): (feature: ol.Feature, resolution: any) => void;
+declare function propertiesZoomStyle(styleFunc: any): (feature: any, resolution: any) => void;
 export default propertiesZoomStyle;
diff --git a/package.json b/package.json
index 182e2f661fc844079d2d3bf2f57c9bab644f92c0..b5ff03c08a719838043b27ef999133bf4cc03425 100644
--- a/package.json
+++ b/package.json
@@ -17,40 +17,38 @@
     "typedoc": "typedoc --excludePrivate --mode file --out doc src",
     "webpack": "webpack -d -w",
     "webpack-prod": "webpack -p",
-    "tsc": "tsc -w",
+    "tsc": "node_modules\\.bin\\tsc -w",
     "karma": "karma start"
   },
   "author": "TOPS Lab",
   "license": "ISC",
   "devDependencies": {
-    "@types/d3": "^4.5.0",
+    "@types/d3": "^4.7.0",
     "@types/jasmine": "^2.5.43",
+    "@types/jquery": "^2.0.40",
     "@types/jqueryui": "^1.11.32",
-    "chai": "^3.5.0",
-    "custom-ol": "git://github.com/glennvorhes/custom-ol.git#master",
-    "expect": "^1.20.1",
+    "custom-ol": "github:glennvorhes/custom-ol",
     "jasmine": "^2.5.3",
     "jasmine-core": "^2.5.2",
+    "jquery": "^3.1.1",
+    "jquery-layout": "^1.0.0",
+    "jquery-ui": "^1.12.1",
     "karma": "^1.5.0",
     "karma-chrome-launcher": "^2.0.0",
     "karma-jasmine": "^1.1.0",
+    "karma-phantomjs-launcher": "^1.0.2",
     "karma-sourcemap-loader": "^0.3.7",
-    "karma-typescript": "^2.1.7",
     "karma-webpack": "^2.0.2",
-    "react": "^15.3.2",
-    "react-dom": "^15.3.2",
-    "source-map-loader": "^0.1.5",
-    "ts-loader": "^0.8.2",
-    "typescript": "^2.2.1"
+    "phantomjs-prebuilt": "^2.1.14",
+    "react": "^15.4.2",
+    "react-dom": "^15.4.2",
+    "ts-loader": "^2.0.1",
+    "typescript": "^2.2.1",
+    "webpack": "^2.2.1"
   },
   "repository": {
     "type": "git",
     "url": "https://github.com/glennvorhes/webmapsjs.git"
   },
-  "dependencies": {
-    "@types/jquery": "^2.0.32",
-    "jquery": "2.2.3",
-    "jquery-layout": "1.0.0",
-    "jquery-ui": "1.10.5"
-  }
+  "dependencies": {}
 }
diff --git a/spec/build/layers/LayerBaseSpec.js b/spec/build/layers/LayerBaseSpec.js
deleted file mode 100644
index 707700a10884d84ac2a737cc1784c87c91f6b9ea..0000000000000000000000000000000000000000
--- a/spec/build/layers/LayerBaseSpec.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*********************************!*\
-  !*** ./layers/LayerBaseSpec.js ***!
-  \*********************************/
-/***/ function(module, exports) {
-
-	// /**
-	//  * Created by glenn on 3/8/2017.
-	//  */
-	//
-	// import {LayerBase, LayerBaseOptions} from '../../dist/layers/LayerBase';
-	//
-	// describe("Layer Base", function () {
-	//
-	//     it('exists', function () {
-	//         expect(LayerBase).toBeDefined()
-	//
-	//     })
-	//
-	//
-	// }); 
-
-
-/***/ }
-/******/ ]);
-//# sourceMappingURL=LayerBaseSpec.js.map
\ No newline at end of file
diff --git a/spec/build/layers/LayerBaseSpec.js.map b/spec/build/layers/LayerBaseSpec.js.map
deleted file mode 100644
index 042d38e1e7bbe06d3b9ec5bc011586069bb20180..0000000000000000000000000000000000000000
--- a/spec/build/layers/LayerBaseSpec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap c5a0503caed534747b5e","webpack:///./layers/LayerBaseSpec.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA,OAAM;AACN,oCAAmC;AACnC,OAAM;AACN,GAAE;AACF,4EAA2E;AAC3E,GAAE;AACF,wCAAuC;AACvC,GAAE;AACF,kCAAiC;AACjC,2CAA0C;AAC1C,GAAE;AACF,UAAS;AACT,GAAE;AACF,GAAE;AACF,OAAM","file":"layers/LayerBaseSpec.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c5a0503caed534747b5e","// /**\r\n//  * Created by glenn on 3/8/2017.\r\n//  */\r\n//\r\n// import {LayerBase, LayerBaseOptions} from '../../dist/layers/LayerBase';\r\n//\r\n// describe(\"Layer Base\", function () {\r\n//\r\n//     it('exists', function () {\r\n//         expect(LayerBase).toBeDefined()\r\n//\r\n//     })\r\n//\r\n//\r\n// });\n\n\n// WEBPACK FOOTER //\n// ./layers/LayerBaseSpec.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/spec/build/layers/LayerBaseVectorGeoJonSpec.js b/spec/build/layers/LayerBaseVectorGeoJonSpec.js
deleted file mode 100644
index dbb31c7d1fa1407191e935c4b288f659205df796..0000000000000000000000000000000000000000
--- a/spec/build/layers/LayerBaseVectorGeoJonSpec.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*********************************************!*\
-  !*** ./layers/LayerBaseVectorGeoJonSpec.js ***!
-  \*********************************************/
-/***/ function(module, exports) {
-
-	// /**
-	//  * Created by glenn on 3/8/2017.
-	//  */
-	//
-	// import {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from '../../dist/layers/LayerBaseVectorGeoJson'
-	// // import {sample_segs} from '../data/sample_segments';
-	//
-	//
-	// import {proj3857, proj4326} from '../../dist/olHelpers/projections';
-	// import ol = require('custom-ol');
-	//
-	//
-	// describe("LayerBaseVeotorGeoJson", function () {
-	//     let geoj: LayerBaseVectorGeoJson;
-	//
-	//     beforeEach(() => {
-	//         geoj = new LayerBaseVectorGeoJson('', {transform: {featureProjection: proj3857}});
-	//     });
-	//
-	//     // it('should exist', function () {
-	//     //     geoj = new LayerBaseVectorGeoJson('');
-	//     //     expect(LayerBaseVectorGeoJson).toBeDefined();
-	//     //     expect(geoj).toBeDefined();
-	//     //     console.log('here are cats')
-	//     //
-	//     // });
-	//
-	//
-	//     it('should read features cams', function () {
-	//         let format = new ol.format.GeoJSON();
-	//
-	//         expect(false).toBe(true);
-	//
-	//
-	//     });
-	//
-	//     it('should read features cams1', function () {
-	//         let format = new ol.format.GeoJSON();
-	//
-	//         expect(false).toBe(true);
-	//
-	//
-	//     });
-	//
-	//
-	//     // it ('should load the sample segments', function () {
-	//     //    expect(geoj.features.length).toBe(0, 'length should be 0');
-	//     //    geoj.addFeatures(sample_segs);
-	//     //    geoj.addFeatures(sample_segs);
-	//     // });
-	//
-	//
-	// }); 
-
-
-/***/ }
-/******/ ]);
-//# sourceMappingURL=LayerBaseVectorGeoJonSpec.js.map
\ No newline at end of file
diff --git a/spec/build/layers/LayerBaseVectorGeoJonSpec.js.map b/spec/build/layers/LayerBaseVectorGeoJonSpec.js.map
deleted file mode 100644
index b1f46c77e04ac2abfd55cec81ed2d51734d9fcda..0000000000000000000000000000000000000000
--- a/spec/build/layers/LayerBaseVectorGeoJonSpec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap c5a0503caed534747b5e?7d3d","webpack:///./layers/LayerBaseVectorGeoJonSpec.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA,OAAM;AACN,oCAAmC;AACnC,OAAM;AACN,GAAE;AACF,kHAAiH;AACjH,2DAA0D;AAC1D,GAAE;AACF,GAAE;AACF,wEAAuE;AACvE,qCAAoC;AACpC,GAAE;AACF,GAAE;AACF,oDAAmD;AACnD,yCAAwC;AACxC,GAAE;AACF,0BAAyB;AACzB,8FAA6F;AAC7F,WAAU;AACV,GAAE;AACF,2CAA0C;AAC1C,qDAAoD;AACpD,4DAA2D;AAC3D,0CAAyC;AACzC,2CAA0C;AAC1C,UAAS;AACT,cAAa;AACb,GAAE;AACF,GAAE;AACF,qDAAoD;AACpD,iDAAgD;AAChD,GAAE;AACF,qCAAoC;AACpC,GAAE;AACF,GAAE;AACF,WAAU;AACV,GAAE;AACF,sDAAqD;AACrD,iDAAgD;AAChD,GAAE;AACF,qCAAoC;AACpC,GAAE;AACF,GAAE;AACF,WAAU;AACV,GAAE;AACF,GAAE;AACF,+DAA8D;AAC9D,yEAAwE;AACxE,4CAA2C;AAC3C,4CAA2C;AAC3C,cAAa;AACb,GAAE;AACF,GAAE;AACF,OAAM","file":"layers/LayerBaseVectorGeoJonSpec.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c5a0503caed534747b5e","// /**\r\n//  * Created by glenn on 3/8/2017.\r\n//  */\r\n//\r\n// import {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from '../../dist/layers/LayerBaseVectorGeoJson'\r\n// // import {sample_segs} from '../data/sample_segments';\r\n//\r\n//\r\n// import {proj3857, proj4326} from '../../dist/olHelpers/projections';\r\n// import ol = require('custom-ol');\r\n//\r\n//\r\n// describe(\"LayerBaseVeotorGeoJson\", function () {\r\n//     let geoj: LayerBaseVectorGeoJson;\r\n//\r\n//     beforeEach(() => {\r\n//         geoj = new LayerBaseVectorGeoJson('', {transform: {featureProjection: proj3857}});\r\n//     });\r\n//\r\n//     // it('should exist', function () {\r\n//     //     geoj = new LayerBaseVectorGeoJson('');\r\n//     //     expect(LayerBaseVectorGeoJson).toBeDefined();\r\n//     //     expect(geoj).toBeDefined();\r\n//     //     console.log('here are cats')\r\n//     //\r\n//     // });\r\n//\r\n//\r\n//     it('should read features cams', function () {\r\n//         let format = new ol.format.GeoJSON();\r\n//\r\n//         expect(false).toBe(true);\r\n//\r\n//\r\n//     });\r\n//\r\n//     it('should read features cams1', function () {\r\n//         let format = new ol.format.GeoJSON();\r\n//\r\n//         expect(false).toBe(true);\r\n//\r\n//\r\n//     });\r\n//\r\n//\r\n//     // it ('should load the sample segments', function () {\r\n//     //    expect(geoj.features.length).toBe(0, 'length should be 0');\r\n//     //    geoj.addFeatures(sample_segs);\r\n//     //    geoj.addFeatures(sample_segs);\r\n//     // });\r\n//\r\n//\r\n// });\n\n\n// WEBPACK FOOTER //\n// ./layers/LayerBaseVectorGeoJonSpec.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/spec/build/newSpec2.js b/spec/build/newSpec2.js
deleted file mode 100644
index 55c23371f0ec1d15cbf1a2bda3768a54e32019c7..0000000000000000000000000000000000000000
--- a/spec/build/newSpec2.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*********************!*\
-  !*** ./newSpec2.js ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by glenn on 3/8/2017.
-	 */
-	// var d = require('custom-ol')
-	describe('a cat', function () {
-	    it('should eat', function () {
-	        expect(1).toBeGreaterThan(0);
-	    });
-	    it('my car', function () {
-	        console.log('here');
-	        console.log('here');
-	        expect(1).toBeGreaterThan(0);
-	        expect(1).toBeGreaterThan(1);
-	    });
-	});
-
-
-/***/ }
-/******/ ]);
-//# sourceMappingURL=newSpec2.js.map
\ No newline at end of file
diff --git a/spec/build/newSpec2.js.map b/spec/build/newSpec2.js.map
deleted file mode 100644
index eb53730c7af49c676d8bb48811b416873fd654e7..0000000000000000000000000000000000000000
--- a/spec/build/newSpec2.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap c5a0503caed534747b5e?7d3d**","webpack:///./newSpec2.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA;;IAEG;AAIH,gCAA+B;AAE/B,SAAQ,CAAC,OAAO,EAAE;KAEd,EAAE,CAAC,YAAY,EAAE;SAEb,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;KAChC,CAAC,CAAC,CAAC;KAEH,EAAE,CAAC,QAAQ,EAAE;SACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC,CAAC;AACN,EAAC,CAAC,CAAC","file":"newSpec2.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c5a0503caed534747b5e","/**\r\n * Created by glenn on 3/8/2017.\r\n */\r\n\r\n\r\n\r\n// var d = require('custom-ol')\r\n\r\ndescribe('a cat', function () {\r\n\r\n    it('should eat', function () {\r\n\r\n        expect(1).toBeGreaterThan(0)\r\n    });\r\n\r\n    it('my car', function () {\r\n        console.log('here');\r\n        console.log('here');\r\n       expect(1).toBeGreaterThan(0);\r\n       expect(1).toBeGreaterThan(1);\r\n    })\r\n});\n\n\n// WEBPACK FOOTER //\n// ./newSpec2.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/spec/build/newSpec3.js b/spec/build/newSpec3.js
deleted file mode 100644
index 6b1a9cce1756332dd3dd97cacbe0c1b068e77a7a..0000000000000000000000000000000000000000
--- a/spec/build/newSpec3.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*********************!*\
-  !*** ./newSpec3.js ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by glenn on 3/8/2017.
-	 */
-	// var d = require('custom-ol')
-	describe('a cat', function () {
-	    it('should eat', function () {
-	        expect(1).toBeGreaterThan(0);
-	    });
-	    it('my car', function () {
-	        console.log('here');
-	        console.log('here');
-	        expect(1).toBeGreaterThan(0);
-	    });
-	    it('eats that fish', function () {
-	        expect(true).toBeTruthy();
-	    });
-	});
-
-
-/***/ }
-/******/ ]);
-//# sourceMappingURL=newSpec3.js.map
\ No newline at end of file
diff --git a/spec/build/newSpec3.js.map b/spec/build/newSpec3.js.map
deleted file mode 100644
index e42e344bd45e6a0c53ef5bb343b0cdb5587b9b2a..0000000000000000000000000000000000000000
--- a/spec/build/newSpec3.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap c5a0503caed534747b5e?7d3d***","webpack:///./newSpec3.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA;;IAEG;AAGH,gCAA+B;AAE/B,SAAQ,CAAC,OAAO,EAAE;KAEd,EAAE,CAAC,YAAY,EAAE;SAEb,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;KAChC,CAAC,CAAC,CAAC;KAEH,EAAE,CAAC,QAAQ,EAAE;SACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC,CAAC,CAAC;KAEH,EAAE,CAAC,gBAAgB,EAAE;SACjB,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;KAC9B,CAAC,CAAC;AACN,EAAC,CAAC,CAAC","file":"newSpec3.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c5a0503caed534747b5e","/**\r\n * Created by glenn on 3/8/2017.\r\n */\r\n\r\n\r\n// var d = require('custom-ol')\r\n\r\ndescribe('a cat', function () {\r\n\r\n    it('should eat', function () {\r\n\r\n        expect(1).toBeGreaterThan(0)\r\n    });\r\n\r\n    it('my car', function () {\r\n        console.log('here');\r\n        console.log('here');\r\n       expect(1).toBeGreaterThan(0);\r\n    });\r\n\r\n    it('eats that fish', function () {\r\n        expect(true).toBeTruthy();\r\n    })\r\n});\n\n\n// WEBPACK FOOTER //\n// ./newSpec3.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/spec/data/geojsonFeatures.js b/spec/data/geojsonFeatures.js
deleted file mode 100644
index 20d11b1f3a1bd138a8682313825e1776d18a7a55..0000000000000000000000000000000000000000
--- a/spec/data/geojsonFeatures.js
+++ /dev/null
@@ -1,960 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-"use strict";
-exports.sample_segs = {
-    // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::3857" } },
-    "type": "FeatureCollection",
-    "features": [{
-            "type": "feature",
-            "properties": {
-                "startRp": "013N005M011",
-                "rdwyRteId": 11,
-                "rateFlag": 0.0,
-                "endMile": 4.53,
-                "mmStnVersion": 2014,
-                "stdName": "WIS 13 NB",
-                "mmVersion": "2016-09",
-                "kabCrshFlag": 0.0,
-                "divUnd": "U",
-                "startMile": 3.71,
-                "endRp": "013N005M093",
-                "pdpId": 2074,
-                "rpDesc": null,
-                "pdpLength": 0.82
-            },
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-9992497.81540399, 5410145.34171217], [-9992856.20056598, 5411588.19634882], [-9992959.88010738, 5411905.88929907], [-9992961.24970403, 5411910.09341592]]
-            }
-        }, {
-            "type": "feature",
-            "properties": {
-                "startRp": "013N005M093",
-                "rdwyRteId": 11,
-                "rateFlag": 0.0,
-                "endMile": 5.18,
-                "mmStnVersion": 2014,
-                "stdName": "WIS 13 NB",
-                "mmVersion": "2016-09",
-                "kabCrshFlag": 0.0,
-                "divUnd": "D",
-                "startMile": 4.53,
-                "endRp": "013N006M000",
-                "pdpId": 2075,
-                "rpDesc": null,
-                "pdpLength": 0.65
-            },
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-9992961.24970403, 5411910.09341592], [-9992966.9804255, 5411927.68442817], [-9993101.26835489, 5412255.64652059], [-9993210.0086723, 5412480.3353547], [-9993328.78576386, 5412696.78672328], [-9993438.48035086, 5412876.11253749], [-9993642.09731562, 5413184.80642233]]
-            }
-        }, {
-            "type": "feature",
-            "properties": {
-                "startRp": "013N006M000",
-                "rdwyRteId": 11,
-                "rateFlag": 0.0,
-                "endMile": 5.87,
-                "mmStnVersion": 2014,
-                "stdName": "WIS 13 NB",
-                "mmVersion": "2016-09",
-                "kabCrshFlag": 0.0,
-                "divUnd": "D",
-                "startMile": 5.18,
-                "endRp": "013N008M000",
-                "pdpId": 2076,
-                "rpDesc": "9TH LANE",
-                "pdpLength": 0.69
-            },
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-9993642.09731562, 5413184.80642233], [-9993773.58263128, 5413383.59418723], [-9994492.85540891, 5414470.91785164]]
-            }
-        }
-    ]
-};
-exports.trench = {
-    "type": "FeatureCollection",
-    "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
-    "features": [{
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.353898883995, 43.044169874006], [-89.353895676627, 43.044158106199]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:32:20",
-                "dateModified": "2015-07-17 18:32:20",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "daafb1c8-10c4-4d69-935d-6266268ea9f5",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 16.456,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2015
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.391309602361, 43.036389485491], [-89.391129453816, 43.036496761869], [-89.390910083702, 43.036613655479], [-89.390729167637, 43.03668719712]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:22:55",
-                "dateModified": "2015-07-17 18:22:55",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "7bcbe96a-f685-45dd-a7b0-bef747b7741a",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 198.985,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2013
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.361873526012, 43.046938009447], [-89.36233732512, 43.046828870794]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:05:05",
-                "dateModified": "2015-07-17 18:05:05",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "cb434d1f-dffb-4c70-a323-c92474ee70d7",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 138,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.345891118977, 43.047127162062], [-89.345891154801, 43.047127141555], [-89.345891147205, 43.047127163123], [-89.345891165372, 43.04712718664]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:07:59",
-                "dateModified": "2016-01-19 13:07:59",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "d0a9e0b2-46c0-4f1e-8650-90c35a8150e9",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.345890404258, 43.047127175086], [-89.345890449894, 43.047127155536], [-89.345890466776, 43.047127184448]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:08:07",
-                "dateModified": "2016-01-19 13:08:07",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "065f7b5d-ec71-47fd-938f-ae85e8032cef",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.39227499277, 43.03841579452], [-89.39265838884, 43.038421358853]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:02:28",
-                "dateModified": "2015-07-17 18:02:28",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "54b1f691-b946-41c3-924d-2481f63a5c8d",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 115,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.35475623516, 43.044670295696], [-89.354731594679, 43.044664272913], [-89.353582742753, 43.044628712402], [-89.353293285746, 43.04436700513], [-89.351319799114, 43.044236240006], [-89.348727261631, 43.044235605738], [-89.348461002083, 43.044072608381], [-89.346571403115, 43.044078588738], [-89.343905538954, 43.044082849338], [-89.341759383041, 43.044078403803]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:13:26",
-                "dateModified": "2015-07-17 18:13:26",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "fc659bfe-fed4-4db1-8c21-e0e151cb5fd8",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 3559.732,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.395177806047, 43.036410455632], [-89.395149966798, 43.036409330561]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:24:54",
-                "dateModified": "2015-07-17 18:24:54",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "e2e5fbd4-7dfd-4897-9df0-a01eba747d65",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 22.738,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2013
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.35459157357, 43.033109401576], [-89.354455841387, 43.033383229942]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:08:37",
-                "dateModified": "2015-07-17 18:08:37",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "9be131ab-9e4e-43a5-93e7-6d98b16dcfa0",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 134,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.356909321568, 43.043583769371], [-89.356911453361, 43.043576438688]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:02:09",
-                "dateModified": "2015-07-17 18:02:09",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "b231ee40-5773-4f5c-822b-0355cc2059a4",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 9.285,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.392996975679, 43.03842539113], [-89.393594623357, 43.038425886759]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:13:44",
-                "dateModified": "2015-07-17 18:13:44",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "50c57080-3e49-4a27-8040-c79c174952d8",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 128,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.391868870338, 43.036014954752], [-89.391856041302, 43.036025977136]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:25:55",
-                "dateModified": "2015-07-17 18:25:55",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "9ed7c662-9944-49ab-8bf5-94704cd6d110",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 14.564,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2013
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.345889904516, 43.047127177633], [-89.345889935209, 43.047127177808]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:08:07",
-                "dateModified": "2016-01-19 13:08:07",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "4a0ba496-2d2f-4876-b8bb-24fed9aa58a0",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.379075782908, 43.038111547553], [-89.379349799008, 43.0372501871]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:07:45",
-                "dateModified": "2016-01-19 13:07:45",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "8425a5e0-fa4b-4f89-8422-dc76ba78a0ab",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.392217325934, 43.036157797979], [-89.392038686732, 43.036086800162]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:25:55",
-                "dateModified": "2015-07-17 18:25:55",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "47b579f5-a79a-4f04-8546-c7340408b0df",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 69.147,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2013
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.345889970765, 43.047127182514], [-89.345889935209, 43.047127177808]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:08:09",
-                "dateModified": "2016-01-19 13:08:09",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "80b32091-588a-438a-bf24-eeed578a1485",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.365717365691, 43.044790184814], [-89.366055621384, 43.04465706628]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:04:16",
-                "dateModified": "2015-07-17 18:04:16",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "2c39e8e6-b6f7-48fc-b8e6-eec23a4e5065",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 113,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.354730567381, 43.036400294633], [-89.354867778807, 43.036911177605]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:08:50",
-                "dateModified": "2015-07-17 18:08:50",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "64983325-54c2-4f00-94d0-65ddd1a73616",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 167,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.377677004437, 43.04118643741], [-89.377125147726, 43.041238817659]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:07:53",
-                "dateModified": "2015-07-17 18:07:53",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "8ba02a21-ae22-4af7-b913-a266d88759c2",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "UTC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "WisDOT",
-                "region": "Southwest",
-                "segLength": 163.901,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.354886880432, 43.039603041611], [-89.354873360775, 43.040026585234]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 18:09:39",
-                "dateModified": "2015-07-17 18:09:39",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "89930faa-b256-4afe-9e46-ccd9d0c70ecf",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "ASC",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "USXchange",
-                "region": "Southwest",
-                "segLength": 165,
-                "srvcStatus": "I",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": 2009
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.378268605015, 43.039635680758], [-89.378484733316, 43.03966826861], [-89.378653989381, 43.039653959331]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:07:49",
-                "dateModified": "2016-01-19 13:07:49",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "c8377ee1-e980-4a11-b9ea-d43221927639",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }, {
-            "type": "Feature",
-            "geometry": {
-                "type": "LineString",
-                "coordinates": [[-89.345890152631, 43.047127168245], [-89.345890131578, 43.047127185234]]
-            },
-            "properties": {
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 13:08:04",
-                "dateModified": "2016-01-19 13:08:04",
-                "description": "",
-                "endDepth": null,
-                "featureGuid": "6123b51a-15e7-477e-a623-8f29b64829e8",
-                "fiberCount": "",
-                "highway": "",
-                "installType": "",
-                "itsId": "",
-                "location": "",
-                "material": "",
-                "owner": "City of Madison",
-                "region": "Southwest",
-                "segLength": null,
-                "srvcStatus": "",
-                "startDepth": null,
-                "trenchSize": null,
-                "yearAdded": null
-            }
-        }]
-};
-exports.cams = {
-    "type": "FeatureCollection",
-    "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
-    "features": [{
-            "type": "Feature",
-            "geometry": { "type": "Point", "coordinates": [-89.32369295359959, 43.17893291595122] },
-            "properties": {
-                "camNumber": 221,
-                "centerId": "Madison",
-                "centerName": "Madison",
-                "city": "",
-                "comments": "",
-                "county": "Dane",
-                "dateCreated": "2015-07-17 14:27:47",
-                "dateModified": "2015-07-17 14:27:47",
-                "description": "",
-                "encoderIp": "",
-                "equipment": "",
-                "featureGuid": "b3254371-b0d6-4fe8-9640-e43a4a3de41e",
-                "height": null,
-                "highway": "I-39/90/94",
-                "instlAdrss": "",
-                "itsId": "CCTV-13-0010",
-                "location": "I-39/90/94 @ US 51",
-                "mac": "",
-                "morisId": "420",
-                "mount": "",
-                "multicast": "",
-                "owner": "",
-                "poleId": "",
-                "region": "Southwest",
-                "svcAcct": "",
-                "svcMeter": "",
-                "url": "content.dot.wi.gov/travel/madison/cameras/cam221.jpg",
-                "yearAdded": null,
-                "Comments": "",
-                "County": "Dane",
-                "Cam_No": 221,
-                "Center-ID": "Madison",
-                "Center-Name": "Madison",
-                "Encoder_IP": "",
-                "Equipment": "",
-                "Install_Address": "",
-                "MAC": "",
-                "Moris_ID": "420",
-                "Multicast": "",
-                "Svc_Prov_Acct": "",
-                "Svc_Prov_Meter": "",
-                "URL": "content.dot.wi.gov/travel/madison/cameras/cam221.jpg"
-            }
-        }, {
-            "type": "Feature",
-            "geometry": { "type": "Point", "coordinates": [-88.5424253013911, 44.014741825246325] },
-            "properties": {
-                "camNumber": null,
-                "centerId": "Green Bay",
-                "centerName": "Milwaukee",
-                "city": "",
-                "comments": "Not in 511 website; Not STOC Operated",
-                "county": "Winnebago",
-                "dateCreated": "2015-07-17 14:28:31",
-                "dateModified": "2015-07-17 14:28:31",
-                "description": "",
-                "encoderIp": "",
-                "equipment": "",
-                "featureGuid": "25e37162-3bd0-4480-9fe4-bdf81071be2f",
-                "height": null,
-                "highway": "Oregon/Jackson St",
-                "instlAdrss": "",
-                "itsId": "CCTV-70-0008",
-                "location": "Oregon/Jackson St @ Wolf River North Pier",
-                "mac": "",
-                "morisId": "",
-                "mount": "",
-                "multicast": "",
-                "owner": "",
-                "poleId": "",
-                "region": "Northeast",
-                "svcAcct": "",
-                "svcMeter": "",
-                "url": "",
-                "yearAdded": null,
-                "Comments": "Not in 511 website; Not STOC Operated",
-                "County": "Winnebago",
-                "Cam_No": null,
-                "Center-ID": "Green Bay",
-                "Center-Name": "Milwaukee",
-                "Encoder_IP": "",
-                "Equipment": "",
-                "Install_Address": "",
-                "MAC": "",
-                "Moris_ID": "",
-                "Multicast": "",
-                "Svc_Prov_Acct": "",
-                "Svc_Prov_Meter": "",
-                "URL": ""
-            }
-        }, {
-            "type": "Feature",
-            "geometry": { "type": "Point", "coordinates": [-89.39186771089234, 43.07556455822463] },
-            "properties": {
-                "camNumber": null,
-                "centerId": "",
-                "centerName": "",
-                "city": "City of Madison",
-                "comments": "360 camera",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 12:57:03",
-                "dateModified": "2016-01-19 12:57:03",
-                "description": "Buckeye Gorham",
-                "encoderIp": "",
-                "equipment": "",
-                "featureGuid": "19a5e1d4-ac35-41c5-8061-fe2d3725b89e",
-                "height": 25,
-                "highway": "",
-                "instlAdrss": "",
-                "itsId": "Buckeye Gorham",
-                "location": "buckeye lot looking toward Gorham",
-                "mac": "",
-                "morisId": "",
-                "mount": "Light Pole",
-                "multicast": "",
-                "owner": "City of Madison",
-                "poleId": "",
-                "region": "Southwest",
-                "svcAcct": "",
-                "svcMeter": "",
-                "url": "",
-                "yearAdded": 2012,
-                "Comments": "360 camera",
-                "County": "Dane",
-                "Cam_No": null,
-                "Center-ID": "",
-                "Center-Name": "",
-                "Encoder_IP": "",
-                "Equipment": "",
-                "Install_Address": "",
-                "MAC": "",
-                "Moris_ID": "",
-                "Multicast": "",
-                "Svc_Prov_Acct": "",
-                "Svc_Prov_Meter": "",
-                "URL": ""
-            }
-        }, {
-            "type": "Feature",
-            "geometry": { "type": "Point", "coordinates": [-87.97019174922053, 43.03718072438942] },
-            "properties": {
-                "camNumber": 82,
-                "centerId": "Milwaukee",
-                "centerName": "Milwaukee",
-                "city": "",
-                "comments": "",
-                "county": "Milwaukee",
-                "dateCreated": "2015-07-17 14:28:14",
-                "dateModified": "2015-07-17 14:28:14",
-                "description": "",
-                "encoderIp": "",
-                "equipment": "",
-                "featureGuid": "4a862936-4395-4824-a9ec-2291855efbed",
-                "height": null,
-                "highway": "WIS 175",
-                "instlAdrss": "",
-                "itsId": "CCTV-40-0082",
-                "location": "WIS 175 @ Bluemound Rd",
-                "mac": "",
-                "morisId": "325",
-                "mount": "",
-                "multicast": "",
-                "owner": "",
-                "poleId": "",
-                "region": "Southeast",
-                "svcAcct": "0041-809-830",
-                "svcMeter": "VZ498758",
-                "url": "content.dot.wi.gov/travel/milwaukee/cameras/cam082.jpg",
-                "yearAdded": null,
-                "Comments": "",
-                "County": "Milwaukee",
-                "Cam_No": 82,
-                "Center-ID": "Milwaukee",
-                "Center-Name": "Milwaukee",
-                "Encoder_IP": "",
-                "Equipment": "",
-                "Install_Address": "",
-                "MAC": "",
-                "Moris_ID": "325",
-                "Multicast": "",
-                "Svc_Prov_Acct": "0041-809-830",
-                "Svc_Prov_Meter": "VZ498758",
-                "URL": "content.dot.wi.gov/travel/milwaukee/cameras/cam082.jpg"
-            }
-        }, {
-            "type": "Feature",
-            "geometry": { "type": "Point", "coordinates": [-89.43360610547992, 43.07329856071294] },
-            "properties": {
-                "camNumber": null,
-                "centerId": "",
-                "centerName": "",
-                "city": "City of Madison",
-                "comments": " ",
-                "county": "Dane",
-                "dateCreated": "2016-01-19 12:57:05",
-                "dateModified": "2016-01-19 12:57:05",
-                "description": "Farley University",
-                "encoderIp": "",
-                "equipment": "",
-                "featureGuid": "c9dd8265-326a-492d-afaf-374fdee875e7",
-                "height": 30,
-                "highway": "",
-                "instlAdrss": "",
-                "itsId": "Farley University",
-                "location": "On corner of Farley Ave and Campus Dr (EB)",
-                "mac": "",
-                "morisId": "",
-                "mount": "Light Pole",
-                "multicast": "",
-                "owner": "City of Madison",
-                "poleId": "",
-                "region": "Southwest",
-                "svcAcct": "",
-                "svcMeter": "",
-                "url": "https://cameras.cityofmadison.com/pull.web?camera=462336&s=0",
-                "yearAdded": 2012,
-                "Comments": " ",
-                "County": "Dane",
-                "Cam_No": null,
-                "Center-ID": "",
-                "Center-Name": "",
-                "Encoder_IP": "",
-                "Equipment": "",
-                "Install_Address": "",
-                "MAC": "",
-                "Moris_ID": "",
-                "Multicast": "",
-                "Svc_Prov_Acct": "",
-                "Svc_Prov_Meter": "",
-                "URL": "https://cameras.cityofmadison.com/pull.web?camera=462336&s=0"
-            }
-        }]
-};
-//# sourceMappingURL=geojsonFeatures.js.map
\ No newline at end of file
diff --git a/spec/data/geojsonFeatures.js.map b/spec/data/geojsonFeatures.js.map
deleted file mode 100644
index a4c7ff128db38dd80eb8742c4aa727e52523bc44..0000000000000000000000000000000000000000
--- a/spec/data/geojsonFeatures.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"geojsonFeatures.js","sourceRoot":"","sources":["geojsonFeatures.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/spec/data/geojsonFeatures.ts b/spec/data/geojsonFeatures.ts
deleted file mode 100644
index 8d9a3db2bba2f88fc2049097b115745fb6bd1f62..0000000000000000000000000000000000000000
--- a/spec/data/geojsonFeatures.ts
+++ /dev/null
@@ -1,963 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-
-
-export const sample_segs = {
-    // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::3857" } },
-    "type": "FeatureCollection",
-    "features": [{
-        "type": "feature",
-        "properties": {
-            "startRp": "013N005M011",
-            "rdwyRteId": 11,
-            "rateFlag": 0.0,
-            "endMile": 4.53,
-            "mmStnVersion": 2014,
-            "stdName": "WIS 13 NB",
-            "mmVersion": "2016-09",
-            "kabCrshFlag": 0.0,
-            "divUnd": "U",
-            "startMile": 3.71,
-            "endRp": "013N005M093",
-            "pdpId": 2074,
-            "rpDesc": null,
-            "pdpLength": 0.82
-        },
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-9992497.81540399, 5410145.34171217], [-9992856.20056598, 5411588.19634882], [-9992959.88010738, 5411905.88929907], [-9992961.24970403, 5411910.09341592]]
-        }
-    }, {
-        "type": "feature",
-        "properties": {
-            "startRp": "013N005M093",
-            "rdwyRteId": 11,
-            "rateFlag": 0.0,
-            "endMile": 5.18,
-            "mmStnVersion": 2014,
-            "stdName": "WIS 13 NB",
-            "mmVersion": "2016-09",
-            "kabCrshFlag": 0.0,
-            "divUnd": "D",
-            "startMile": 4.53,
-            "endRp": "013N006M000",
-            "pdpId": 2075,
-            "rpDesc": null,
-            "pdpLength": 0.65
-        },
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-9992961.24970403, 5411910.09341592], [-9992966.9804255, 5411927.68442817], [-9993101.26835489, 5412255.64652059], [-9993210.0086723, 5412480.3353547], [-9993328.78576386, 5412696.78672328], [-9993438.48035086, 5412876.11253749], [-9993642.09731562, 5413184.80642233]]
-        }
-    }, {
-        "type": "feature",
-        "properties": {
-            "startRp": "013N006M000",
-            "rdwyRteId": 11,
-            "rateFlag": 0.0,
-            "endMile": 5.87,
-            "mmStnVersion": 2014,
-            "stdName": "WIS 13 NB",
-            "mmVersion": "2016-09",
-            "kabCrshFlag": 0.0,
-            "divUnd": "D",
-            "startMile": 5.18,
-            "endRp": "013N008M000",
-            "pdpId": 2076,
-            "rpDesc": "9TH LANE",
-            "pdpLength": 0.69
-        },
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-9993642.09731562, 5413184.80642233], [-9993773.58263128, 5413383.59418723], [-9994492.85540891, 5414470.91785164]]
-        }
-    }
-    ]
-};
-
-export const trench = {
-    "type": "FeatureCollection",
-    "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}},
-    "features": [{
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.353898883995, 43.044169874006], [-89.353895676627, 43.044158106199]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:32:20",
-            "dateModified": "2015-07-17 18:32:20",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "daafb1c8-10c4-4d69-935d-6266268ea9f5",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 16.456,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2015
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.391309602361, 43.036389485491], [-89.391129453816, 43.036496761869], [-89.390910083702, 43.036613655479], [-89.390729167637, 43.03668719712]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:22:55",
-            "dateModified": "2015-07-17 18:22:55",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "7bcbe96a-f685-45dd-a7b0-bef747b7741a",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 198.985,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2013
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.361873526012, 43.046938009447], [-89.36233732512, 43.046828870794]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:05:05",
-            "dateModified": "2015-07-17 18:05:05",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "cb434d1f-dffb-4c70-a323-c92474ee70d7",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 138,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.345891118977, 43.047127162062], [-89.345891154801, 43.047127141555], [-89.345891147205, 43.047127163123], [-89.345891165372, 43.04712718664]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:07:59",
-            "dateModified": "2016-01-19 13:07:59",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "d0a9e0b2-46c0-4f1e-8650-90c35a8150e9",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.345890404258, 43.047127175086], [-89.345890449894, 43.047127155536], [-89.345890466776, 43.047127184448]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:08:07",
-            "dateModified": "2016-01-19 13:08:07",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "065f7b5d-ec71-47fd-938f-ae85e8032cef",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.39227499277, 43.03841579452], [-89.39265838884, 43.038421358853]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:02:28",
-            "dateModified": "2015-07-17 18:02:28",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "54b1f691-b946-41c3-924d-2481f63a5c8d",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 115,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.35475623516, 43.044670295696], [-89.354731594679, 43.044664272913], [-89.353582742753, 43.044628712402], [-89.353293285746, 43.04436700513], [-89.351319799114, 43.044236240006], [-89.348727261631, 43.044235605738], [-89.348461002083, 43.044072608381], [-89.346571403115, 43.044078588738], [-89.343905538954, 43.044082849338], [-89.341759383041, 43.044078403803]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:13:26",
-            "dateModified": "2015-07-17 18:13:26",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "fc659bfe-fed4-4db1-8c21-e0e151cb5fd8",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 3559.732,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.395177806047, 43.036410455632], [-89.395149966798, 43.036409330561]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:24:54",
-            "dateModified": "2015-07-17 18:24:54",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "e2e5fbd4-7dfd-4897-9df0-a01eba747d65",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 22.738,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2013
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.35459157357, 43.033109401576], [-89.354455841387, 43.033383229942]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:08:37",
-            "dateModified": "2015-07-17 18:08:37",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "9be131ab-9e4e-43a5-93e7-6d98b16dcfa0",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 134,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.356909321568, 43.043583769371], [-89.356911453361, 43.043576438688]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:02:09",
-            "dateModified": "2015-07-17 18:02:09",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "b231ee40-5773-4f5c-822b-0355cc2059a4",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 9.285,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.392996975679, 43.03842539113], [-89.393594623357, 43.038425886759]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:13:44",
-            "dateModified": "2015-07-17 18:13:44",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "50c57080-3e49-4a27-8040-c79c174952d8",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 128,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.391868870338, 43.036014954752], [-89.391856041302, 43.036025977136]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:25:55",
-            "dateModified": "2015-07-17 18:25:55",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "9ed7c662-9944-49ab-8bf5-94704cd6d110",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 14.564,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2013
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.345889904516, 43.047127177633], [-89.345889935209, 43.047127177808]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:08:07",
-            "dateModified": "2016-01-19 13:08:07",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "4a0ba496-2d2f-4876-b8bb-24fed9aa58a0",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.379075782908, 43.038111547553], [-89.379349799008, 43.0372501871]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:07:45",
-            "dateModified": "2016-01-19 13:07:45",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "8425a5e0-fa4b-4f89-8422-dc76ba78a0ab",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.392217325934, 43.036157797979], [-89.392038686732, 43.036086800162]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:25:55",
-            "dateModified": "2015-07-17 18:25:55",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "47b579f5-a79a-4f04-8546-c7340408b0df",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 69.147,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2013
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.345889970765, 43.047127182514], [-89.345889935209, 43.047127177808]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:08:09",
-            "dateModified": "2016-01-19 13:08:09",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "80b32091-588a-438a-bf24-eeed578a1485",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.365717365691, 43.044790184814], [-89.366055621384, 43.04465706628]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:04:16",
-            "dateModified": "2015-07-17 18:04:16",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "2c39e8e6-b6f7-48fc-b8e6-eec23a4e5065",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 113,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.354730567381, 43.036400294633], [-89.354867778807, 43.036911177605]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:08:50",
-            "dateModified": "2015-07-17 18:08:50",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "64983325-54c2-4f00-94d0-65ddd1a73616",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 167,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.377677004437, 43.04118643741], [-89.377125147726, 43.041238817659]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:07:53",
-            "dateModified": "2015-07-17 18:07:53",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "8ba02a21-ae22-4af7-b913-a266d88759c2",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "UTC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "WisDOT",
-            "region": "Southwest",
-            "segLength": 163.901,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.354886880432, 43.039603041611], [-89.354873360775, 43.040026585234]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 18:09:39",
-            "dateModified": "2015-07-17 18:09:39",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "89930faa-b256-4afe-9e46-ccd9d0c70ecf",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "ASC",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "USXchange",
-            "region": "Southwest",
-            "segLength": 165,
-            "srvcStatus": "I",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": 2009
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.378268605015, 43.039635680758], [-89.378484733316, 43.03966826861], [-89.378653989381, 43.039653959331]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:07:49",
-            "dateModified": "2016-01-19 13:07:49",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "c8377ee1-e980-4a11-b9ea-d43221927639",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {
-            "type": "LineString",
-            "coordinates": [[-89.345890152631, 43.047127168245], [-89.345890131578, 43.047127185234]]
-        },
-        "properties": {
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 13:08:04",
-            "dateModified": "2016-01-19 13:08:04",
-            "description": "",
-            "endDepth": null,
-            "featureGuid": "6123b51a-15e7-477e-a623-8f29b64829e8",
-            "fiberCount": "",
-            "highway": "",
-            "installType": "",
-            "itsId": "",
-            "location": "",
-            "material": "",
-            "owner": "City of Madison",
-            "region": "Southwest",
-            "segLength": null,
-            "srvcStatus": "",
-            "startDepth": null,
-            "trenchSize": null,
-            "yearAdded": null
-        }
-    }]
-};
-
-
-export const cams = {
-    "type": "FeatureCollection",
-    "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}},
-    "features": [{
-        "type": "Feature",
-        "geometry": {"type": "Point", "coordinates": [-89.32369295359959, 43.17893291595122]},
-        "properties": {
-            "camNumber": 221,
-            "centerId": "Madison",
-            "centerName": "Madison",
-            "city": "",
-            "comments": "",
-            "county": "Dane",
-            "dateCreated": "2015-07-17 14:27:47",
-            "dateModified": "2015-07-17 14:27:47",
-            "description": "",
-            "encoderIp": "",
-            "equipment": "",
-            "featureGuid": "b3254371-b0d6-4fe8-9640-e43a4a3de41e",
-            "height": null,
-            "highway": "I-39/90/94",
-            "instlAdrss": "",
-            "itsId": "CCTV-13-0010",
-            "location": "I-39/90/94 @ US 51",
-            "mac": "",
-            "morisId": "420",
-            "mount": "",
-            "multicast": "",
-            "owner": "",
-            "poleId": "",
-            "region": "Southwest",
-            "svcAcct": "",
-            "svcMeter": "",
-            "url": "content.dot.wi.gov/travel/madison/cameras/cam221.jpg",
-            "yearAdded": null,
-            "Comments": "",
-            "County": "Dane",
-            "Cam_No": 221,
-            "Center-ID": "Madison",
-            "Center-Name": "Madison",
-            "Encoder_IP": "",
-            "Equipment": "",
-            "Install_Address": "",
-            "MAC": "",
-            "Moris_ID": "420",
-            "Multicast": "",
-            "Svc_Prov_Acct": "",
-            "Svc_Prov_Meter": "",
-            "URL": "content.dot.wi.gov/travel/madison/cameras/cam221.jpg"
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {"type": "Point", "coordinates": [-88.5424253013911, 44.014741825246325]},
-        "properties": {
-            "camNumber": null,
-            "centerId": "Green Bay",
-            "centerName": "Milwaukee",
-            "city": "",
-            "comments": "Not in 511 website; Not STOC Operated",
-            "county": "Winnebago",
-            "dateCreated": "2015-07-17 14:28:31",
-            "dateModified": "2015-07-17 14:28:31",
-            "description": "",
-            "encoderIp": "",
-            "equipment": "",
-            "featureGuid": "25e37162-3bd0-4480-9fe4-bdf81071be2f",
-            "height": null,
-            "highway": "Oregon/Jackson St",
-            "instlAdrss": "",
-            "itsId": "CCTV-70-0008",
-            "location": "Oregon/Jackson St @ Wolf River North Pier",
-            "mac": "",
-            "morisId": "",
-            "mount": "",
-            "multicast": "",
-            "owner": "",
-            "poleId": "",
-            "region": "Northeast",
-            "svcAcct": "",
-            "svcMeter": "",
-            "url": "",
-            "yearAdded": null,
-            "Comments": "Not in 511 website; Not STOC Operated",
-            "County": "Winnebago",
-            "Cam_No": null,
-            "Center-ID": "Green Bay",
-            "Center-Name": "Milwaukee",
-            "Encoder_IP": "",
-            "Equipment": "",
-            "Install_Address": "",
-            "MAC": "",
-            "Moris_ID": "",
-            "Multicast": "",
-            "Svc_Prov_Acct": "",
-            "Svc_Prov_Meter": "",
-            "URL": ""
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {"type": "Point", "coordinates": [-89.39186771089234, 43.07556455822463]},
-        "properties": {
-            "camNumber": null,
-            "centerId": "",
-            "centerName": "",
-            "city": "City of Madison",
-            "comments": "360 camera",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 12:57:03",
-            "dateModified": "2016-01-19 12:57:03",
-            "description": "Buckeye Gorham",
-            "encoderIp": "",
-            "equipment": "",
-            "featureGuid": "19a5e1d4-ac35-41c5-8061-fe2d3725b89e",
-            "height": 25,
-            "highway": "",
-            "instlAdrss": "",
-            "itsId": "Buckeye Gorham",
-            "location": "buckeye lot looking toward Gorham",
-            "mac": "",
-            "morisId": "",
-            "mount": "Light Pole",
-            "multicast": "",
-            "owner": "City of Madison",
-            "poleId": "",
-            "region": "Southwest",
-            "svcAcct": "",
-            "svcMeter": "",
-            "url": "",
-            "yearAdded": 2012,
-            "Comments": "360 camera",
-            "County": "Dane",
-            "Cam_No": null,
-            "Center-ID": "",
-            "Center-Name": "",
-            "Encoder_IP": "",
-            "Equipment": "",
-            "Install_Address": "",
-            "MAC": "",
-            "Moris_ID": "",
-            "Multicast": "",
-            "Svc_Prov_Acct": "",
-            "Svc_Prov_Meter": "",
-            "URL": ""
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {"type": "Point", "coordinates": [-87.97019174922053, 43.03718072438942]},
-        "properties": {
-            "camNumber": 82,
-            "centerId": "Milwaukee",
-            "centerName": "Milwaukee",
-            "city": "",
-            "comments": "",
-            "county": "Milwaukee",
-            "dateCreated": "2015-07-17 14:28:14",
-            "dateModified": "2015-07-17 14:28:14",
-            "description": "",
-            "encoderIp": "",
-            "equipment": "",
-            "featureGuid": "4a862936-4395-4824-a9ec-2291855efbed",
-            "height": null,
-            "highway": "WIS 175",
-            "instlAdrss": "",
-            "itsId": "CCTV-40-0082",
-            "location": "WIS 175 @ Bluemound Rd",
-            "mac": "",
-            "morisId": "325",
-            "mount": "",
-            "multicast": "",
-            "owner": "",
-            "poleId": "",
-            "region": "Southeast",
-            "svcAcct": "0041-809-830",
-            "svcMeter": "VZ498758",
-            "url": "content.dot.wi.gov/travel/milwaukee/cameras/cam082.jpg",
-            "yearAdded": null,
-            "Comments": "",
-            "County": "Milwaukee",
-            "Cam_No": 82,
-            "Center-ID": "Milwaukee",
-            "Center-Name": "Milwaukee",
-            "Encoder_IP": "",
-            "Equipment": "",
-            "Install_Address": "",
-            "MAC": "",
-            "Moris_ID": "325",
-            "Multicast": "",
-            "Svc_Prov_Acct": "0041-809-830",
-            "Svc_Prov_Meter": "VZ498758",
-            "URL": "content.dot.wi.gov/travel/milwaukee/cameras/cam082.jpg"
-        }
-    }, {
-        "type": "Feature",
-        "geometry": {"type": "Point", "coordinates": [-89.43360610547992, 43.07329856071294]},
-        "properties": {
-            "camNumber": null,
-            "centerId": "",
-            "centerName": "",
-            "city": "City of Madison",
-            "comments": " ",
-            "county": "Dane",
-            "dateCreated": "2016-01-19 12:57:05",
-            "dateModified": "2016-01-19 12:57:05",
-            "description": "Farley University",
-            "encoderIp": "",
-            "equipment": "",
-            "featureGuid": "c9dd8265-326a-492d-afaf-374fdee875e7",
-            "height": 30,
-            "highway": "",
-            "instlAdrss": "",
-            "itsId": "Farley University",
-            "location": "On corner of Farley Ave and Campus Dr (EB)",
-            "mac": "",
-            "morisId": "",
-            "mount": "Light Pole",
-            "multicast": "",
-            "owner": "City of Madison",
-            "poleId": "",
-            "region": "Southwest",
-            "svcAcct": "",
-            "svcMeter": "",
-            "url": "https://cameras.cityofmadison.com/pull.web?camera=462336&s=0",
-            "yearAdded": 2012,
-            "Comments": " ",
-            "County": "Dane",
-            "Cam_No": null,
-            "Center-ID": "",
-            "Center-Name": "",
-            "Encoder_IP": "",
-            "Equipment": "",
-            "Install_Address": "",
-            "MAC": "",
-            "Moris_ID": "",
-            "Multicast": "",
-            "Svc_Prov_Acct": "",
-            "Svc_Prov_Meter": "",
-            "URL": "https://cameras.cityofmadison.com/pull.web?camera=462336&s=0"
-        }
-    }]
-};
\ No newline at end of file
diff --git a/spec/layers/LayerBaseSpec.js b/spec/layers/LayerBaseSpec.js
deleted file mode 100644
index fe914855a740ee59c988b1add7008d8679015937..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseSpec.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// /**
-//  * Created by glenn on 3/8/2017.
-//  */
-//
-// import {LayerBase, LayerBaseOptions} from '../../dist/layers/LayerBase';
-//
-// describe("Layer Base", function () {
-//
-//     it('exists', function () {
-//         expect(LayerBase).toBeDefined()
-//
-//     })
-//
-//
-// }); 
-//# sourceMappingURL=LayerBaseSpec.js.map
\ No newline at end of file
diff --git a/spec/layers/LayerBaseSpec.js.map b/spec/layers/LayerBaseSpec.js.map
deleted file mode 100644
index 87aeee6ed5b969be651240502fb6feea073e941a..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseSpec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"LayerBaseSpec.js","sourceRoot":"","sources":["LayerBaseSpec.ts"],"names":[],"mappings":"AAAA,MAAM;AACN,mCAAmC;AACnC,MAAM;AACN,EAAE;AACF,2EAA2E;AAC3E,EAAE;AACF,uCAAuC;AACvC,EAAE;AACF,iCAAiC;AACjC,0CAA0C;AAC1C,EAAE;AACF,SAAS;AACT,EAAE;AACF,EAAE;AACF,MAAM"}
\ No newline at end of file
diff --git a/spec/layers/LayerBaseSpec.ts b/spec/layers/LayerBaseSpec.ts
deleted file mode 100644
index a867b9ec6d601b5745e9e2dd5d2264675ea98f45..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseSpec.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// /**
-//  * Created by glenn on 3/8/2017.
-//  */
-//
-// import {LayerBase, LayerBaseOptions} from '../../dist/layers/LayerBase';
-//
-// describe("Layer Base", function () {
-//
-//     it('exists', function () {
-//         expect(LayerBase).toBeDefined()
-//
-//     })
-//
-//
-// });
\ No newline at end of file
diff --git a/spec/layers/LayerBaseVectorGeoJonSpec.js b/spec/layers/LayerBaseVectorGeoJonSpec.js
deleted file mode 100644
index 588d7d35105a226d52111915905b7c650766a650..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseVectorGeoJonSpec.js
+++ /dev/null
@@ -1,51 +0,0 @@
-"use strict";
-// /**
-//  * Created by glenn on 3/8/2017.
-//  */
-//
-var LayerBaseVectorGeoJson_1 = require("../../dist/layers/LayerBaseVectorGeoJson");
-// // import {sample_segs} from '../data/sample_segments';
-//
-//
-var projections_1 = require("../../dist/olHelpers/projections");
-// import ol = require('custom-ol');
-//
-//
-describe("LayerBaseVeotorGeoJson", function () {
-    var geoj;
-    beforeEach(function () {
-        geoj = new LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson('', { transform: { featureProjection: projections_1.proj3857 } });
-    });
-    //
-    it('should exist', function () {
-        geoj = new LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson('');
-        expect(LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson).toBeDefined();
-        expect(geoj).toBeDefined();
-        console.log('here are cats');
-    });
-    //     it('should read features cams', function () {
-    //         let format = new ol.format.GeoJSON();
-    //
-    //         expect(false).toBe(true);
-    //
-    //
-    //     });
-    //
-    //     it('should read features cams1', function () {
-    //         let format = new ol.format.GeoJSON();
-    //
-    //         expect(false).toBe(true);
-    //
-    //
-    //     });
-    //
-    //
-    //     // it ('should load the sample segments', function () {
-    //     //    expect(geoj.features.length).toBe(0, 'length should be 0');
-    //     //    geoj.addFeatures(sample_segs);
-    //     //    geoj.addFeatures(sample_segs);
-    //     // });
-    //
-    //
-});
-//# sourceMappingURL=LayerBaseVectorGeoJonSpec.js.map
\ No newline at end of file
diff --git a/spec/layers/LayerBaseVectorGeoJonSpec.js.map b/spec/layers/LayerBaseVectorGeoJonSpec.js.map
deleted file mode 100644
index 81f804b5fd34bdf1e004c97379b34b9e14fa68ec..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseVectorGeoJonSpec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"LayerBaseVectorGeoJonSpec.js","sourceRoot":"","sources":["LayerBaseVectorGeoJonSpec.ts"],"names":[],"mappings":";AAAA,MAAM;AACN,mCAAmC;AACnC,MAAM;AACN,EAAE;AACF,mFAA+G;AAC/G,0DAA0D;AAC1D,EAAE;AACF,EAAE;AACF,gEAAoE;AAGpE,oCAAoC;AACpC,EAAE;AACF,EAAE;AACF,QAAQ,CAAC,wBAAwB,EAAE;IAC/B,IAAI,IAA4B,CAAC;IAEjC,UAAU,CAAC;QACP,IAAI,GAAG,IAAI,+CAAsB,CAAC,EAAE,EAAE,EAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,sBAAQ,EAAC,EAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IACP,EAAE;IACE,EAAE,CAAC,cAAc,EAAE;QACf,IAAI,GAAG,IAAI,+CAAsB,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,+CAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAChC,CAAC,CAAC,CAAC;IAGP,oDAAoD;IACpD,gDAAgD;IAChD,EAAE;IACF,oCAAoC;IACpC,EAAE;IACF,EAAE;IACF,UAAU;IACV,EAAE;IACF,qDAAqD;IACrD,gDAAgD;IAChD,EAAE;IACF,oCAAoC;IACpC,EAAE;IACF,EAAE;IACF,UAAU;IACV,EAAE;IACF,EAAE;IACF,8DAA8D;IAC9D,wEAAwE;IACxE,2CAA2C;IAC3C,2CAA2C;IAC3C,aAAa;IACb,EAAE;IACF,EAAE;AACF,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/spec/layers/LayerBaseVectorGeoJonSpec.ts b/spec/layers/LayerBaseVectorGeoJonSpec.ts
deleted file mode 100644
index f61874e07eda61e11688b776c7f28258ce4c8427..0000000000000000000000000000000000000000
--- a/spec/layers/LayerBaseVectorGeoJonSpec.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// /**
-//  * Created by glenn on 3/8/2017.
-//  */
-//
-import {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from '../../dist/layers/LayerBaseVectorGeoJson';
-// // import {sample_segs} from '../data/sample_segments';
-//
-//
-import {proj3857, proj4326} from '../../dist/olHelpers/projections';
-import {cams, sample_segs, trench} from '../data/geojsonFeatures';
-
-// import ol = require('custom-ol');
-//
-//
-describe("LayerBaseVeotorGeoJson", function () {
-    let geoj: LayerBaseVectorGeoJson;
-
-    beforeEach(() => {
-        geoj = new LayerBaseVectorGeoJson('', {transform: {featureProjection: proj3857}});
-    });
-//
-    it('should exist', function () {
-        geoj = new LayerBaseVectorGeoJson('');
-        expect(LayerBaseVectorGeoJson).toBeDefined();
-        expect(geoj).toBeDefined();
-        console.log('here are cats')
-    });
-
-
-//     it('should read features cams', function () {
-//         let format = new ol.format.GeoJSON();
-//
-//         expect(false).toBe(true);
-//
-//
-//     });
-//
-//     it('should read features cams1', function () {
-//         let format = new ol.format.GeoJSON();
-//
-//         expect(false).toBe(true);
-//
-//
-//     });
-//
-//
-//     // it ('should load the sample segments', function () {
-//     //    expect(geoj.features.length).toBe(0, 'length should be 0');
-//     //    geoj.addFeatures(sample_segs);
-//     //    geoj.addFeatures(sample_segs);
-//     // });
-//
-//
-});
\ No newline at end of file
diff --git a/spec/newSpec2.js b/spec/newSpec2.js
deleted file mode 100644
index 27c5b4a4e322d5db798ef0fcbe70555cda0d53bf..0000000000000000000000000000000000000000
--- a/spec/newSpec2.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-// var d = require('custom-ol')
-describe('a cat2', function () {
-    it('should eat', function () {
-        expect(1).toBeGreaterThan(0);
-    });
-    it('my car', function () {
-        console.log('here');
-        console.log('here');
-        expect(1).toBeGreaterThan(0);
-        expect(1).toBeGreaterThan(0);
-        expect(1).toBeGreaterThan(0);
-        // expect(1).toBeGreaterThan(1);
-        // expect(0).toBeGreaterThan(0);
-    });
-});
-//# sourceMappingURL=newSpec2.js.map
\ No newline at end of file
diff --git a/spec/newSpec2.js.map b/spec/newSpec2.js.map
deleted file mode 100644
index e88218d25b7a7df0bce80da063a80a9f717c908a..0000000000000000000000000000000000000000
--- a/spec/newSpec2.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"newSpec2.js","sourceRoot":"","sources":["newSpec2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,+BAA+B;AAE/B,QAAQ,CAAC,QAAQ,EAAE;IAEf,EAAE,CAAC,YAAY,EAAE;QAEb,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,QAAQ,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7B,gCAAgC;QAChC,gCAAgC;IAInC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/spec/newSpec2.ts b/spec/newSpec2.ts
deleted file mode 100644
index 8586da820288ef9be09d834f457b743d36bec603..0000000000000000000000000000000000000000
--- a/spec/newSpec2.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-
-
-
-// var d = require('custom-ol')
-
-describe('a cat2', function () {
-
-    it('should eat', function () {
-
-        expect(1).toBeGreaterThan(0)
-    });
-
-    it('my car', function () {
-        console.log('here');
-        console.log('here');
-       expect(1).toBeGreaterThan(0);
-       expect(1).toBeGreaterThan(0);
-       expect(1).toBeGreaterThan(0);
-       // expect(1).toBeGreaterThan(1);
-       // expect(0).toBeGreaterThan(0);
-
-
-
-    })
-});
\ No newline at end of file
diff --git a/spec/newSpec3.js b/spec/newSpec3.js
deleted file mode 100644
index 14ef6aa3513f9d2becfc3b9a1fb392918e1235cc..0000000000000000000000000000000000000000
--- a/spec/newSpec3.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-// var d = require('custom-ol')
-describe('a cat', function () {
-    it('should eat', function () {
-        expect(1).toBeGreaterThan(0);
-    });
-    it('my car', function () {
-        console.log('here');
-        console.log('here');
-        expect(1).toBeGreaterThan(0);
-    });
-    it('eats that fish', function () {
-        expect(true).toBeTruthy();
-    });
-});
-//# sourceMappingURL=newSpec3.js.map
\ No newline at end of file
diff --git a/spec/newSpec3.js.map b/spec/newSpec3.js.map
deleted file mode 100644
index dfcdbe9092d0352b254ea40788e346e1009a539c..0000000000000000000000000000000000000000
--- a/spec/newSpec3.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"newSpec3.js","sourceRoot":"","sources":["newSpec3.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,+BAA+B;AAE/B,QAAQ,CAAC,OAAO,EAAE;IAEd,EAAE,CAAC,YAAY,EAAE;QAEb,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,QAAQ,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/spec/newSpec3.ts b/spec/newSpec3.ts
deleted file mode 100644
index 492331471a1fda99981011eb50da9733973ca9ae..0000000000000000000000000000000000000000
--- a/spec/newSpec3.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Created by glenn on 3/8/2017.
- */
-
-
-// var d = require('custom-ol')
-
-describe('a cat', function () {
-
-    it('should eat', function () {
-
-        expect(1).toBeGreaterThan(0)
-    });
-
-    it('my car', function () {
-        console.log('here');
-        console.log('here');
-       expect(1).toBeGreaterThan(0);
-    });
-
-    it('eats that fish', function () {
-        expect(true).toBeTruthy();
-    })
-});
\ No newline at end of file
diff --git a/spec/package.json b/spec/package.json
deleted file mode 100644
index afb14207b2ca9fedeadc3806985993aadd5df361..0000000000000000000000000000000000000000
--- a/spec/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "name": "spec",
-  "version": "1.0.0",
-  "description": "specs",
-  "main": "index.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1",
-    "tsc-spec": "tsc -w",
-    "webpack-spec": "webpack -d -w"
-  },
-  "author": "",
-  "license": "ISC"
-}
diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json
deleted file mode 100644
index 3ea316690ab5cc2bff0aaf5ba1055cb0e62f1a26..0000000000000000000000000000000000000000
--- a/spec/support/jasmine.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "spec_dir": "spec",
-  "spec_files": [
-    "**/*[sS]pec.js"
-  ],
-  "helpers": [
-    "helpers/**/*.js"
-  ],
-  "stopSpecOnExpectationFailure": false,
-  "random": false
-}
diff --git a/spec/tsconfig.json b/spec/tsconfig.json
deleted file mode 100644
index d61fe211fc84242c73050d77640269f7d30c9390..0000000000000000000000000000000000000000
--- a/spec/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "compileOnSave": true,
-  "version": "2.0.3",
-  "compilerOptions": {
-    "module": "commonjs",
-    "target": "es5",
-    "noImplicitAny": false,
-    "sourceMap": true
-  },
-  "include": [
-    "**/*.ts"
-  ]
-}
\ No newline at end of file
diff --git a/spec/webpack.config.js b/spec/webpack.config.js
deleted file mode 100644
index 8e4a9d598896b6af049c8342de1af471645ae163..0000000000000000000000000000000000000000
--- a/spec/webpack.config.js
+++ /dev/null
@@ -1,77 +0,0 @@
-"use strict";
-const path = require('path');
-const fs = require('fs');
-
-// const testAppDir = path.join(__dirname, 'dist/_test');
-// const outDir = path.join(__dirname, 'test-html/js');
-//
-// const files = fs.readdirSync(testAppDir);
-// const entries = {};
-//
-// for (var i = 0; i < files.length; i++) {
-//     var e = files[i];
-//     if (e.match(/\.js$/) == null) {
-//         continue;
-//     }
-//     entries[e.replace(/.js/, '')] = path.join(testAppDir, e);
-// }
-
-
-function getFiles() {
-    /**
-     * Created by glenn on 3/8/2017.
-     */
-    var walkSync = function (dir, filelist) {
-        var files = fs.readdirSync(dir);
-        filelist = filelist || [];
-        files.forEach(function (file) {
-            var maybeDirectory = dir + '/' + file;
-
-            if (fs.statSync(maybeDirectory).isDirectory() && !maybeDirectory.match(/\/build|node_modules|data/)) {
-                filelist = walkSync(dir + '/' + file, filelist);
-            }
-            else {
-                if (file.match(/\.js$/) && !file.match(/^webpack/)) {
-                    filelist.push(dir + '/' + file);
-                }
-
-            }
-        });
-        return filelist;
-    };
-
-    var js_files = walkSync('.');
-
-    var outVal = {};
-
-    for (let f of js_files) {
-        var key = f.replace(/^\.\//, '');
-        outVal[key] = f;
-
-    }
-
-    return outVal;
-}
-
-module.exports = {
-    entry: getFiles(),
-    devtool: 'source-map',
-    output: {
-        path: path.join(__dirname, "build"),
-        filename: "[name]"
-    },
-    module: {
-        loaders: [
-            {test: /\.js$/, loader: "source-map-loader"}
-        ]
-    },
-    externals: {
-        "jquery": "$",
-        "custom-ol": "ol",
-        "react": "React",
-        "react-dom": "ReactDOM"
-    }
-};
-
-
-console.log(getFiles());
\ No newline at end of file
diff --git a/src/_test/animate.ts b/src/_test/animate.ts
index f9531066f20c2049f3826920023ab75bd69cb723..9a36fbad5bed0cbc679e62c55f92514fbbc6e80e 100644
--- a/src/_test/animate.ts
+++ b/src/_test/animate.ts
@@ -4,6 +4,7 @@ import {MediaControl, changeFunction} from "../domUtil/media-control";
 import $ = require('jquery');
 import {LayerBaseVectorEsri} from "../layers/LayerBaseVectorEsri";
 import {LayerEsriMapServer} from "../layers/LayerEsriMapServer";
+import 'jquery-ui';
 
 
 let nexrhresStatic = new LayerRealEarthTile({
diff --git a/src/_test/slider-test.ts b/src/_test/slider-test.ts
index cb4da1a08439713947acb1d0cd3e99348c4f2cbe..3a561c2133e8dd49a56cc0060359127dcd889b8a 100644
--- a/src/_test/slider-test.ts
+++ b/src/_test/slider-test.ts
@@ -4,6 +4,7 @@
 import {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';
 import $ = require('jquery');
 import ol = require('custom-ol');
+import 'jquery-ui';
 
 
 
diff --git a/src/domUtil/day-range.ts b/src/domUtil/day-range.ts
index 9863c16c6f5357b70f5898c2d817ea4c6d189420..10e8c3071797b8f85edb5bbc4aa9164d26bdf57d 100644
--- a/src/domUtil/day-range.ts
+++ b/src/domUtil/day-range.ts
@@ -1,6 +1,6 @@
 import provide from '../util/provide';
 import $ = require('jquery');
-// import 'jquery-ui';
+import 'jquery-ui';
 
 let nm = provide('domUtil');
 
diff --git a/test-html/js/animate.js b/test-html/js/animate.js
index fa243904ab822796f06cc31697c68c051b1558c1..5e935c81fbe3a5b1cf8c02d55bad0d6f57902bb4 100644
--- a/test-html/js/animate.js
+++ b/test-html/js/animate.js
@@ -1,3365 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*******************************!*\
-  !*** ./dist/_test/animate.js ***!
-  \*******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var quickMap_1 = __webpack_require__(/*! ../olHelpers/quickMap */ 1);
-	var LayerRealEarthTile_1 = __webpack_require__(/*! ../layers/LayerRealEarthTile */ 13);
-	var media_control_1 = __webpack_require__(/*! ../domUtil/media-control */ 19);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	var LayerBaseVectorEsri_1 = __webpack_require__(/*! ../layers/LayerBaseVectorEsri */ 21);
-	var LayerEsriMapServer_1 = __webpack_require__(/*! ../layers/LayerEsriMapServer */ 24);
-	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);
-	}
-
-
-/***/ },
-/* 1 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/quickMap.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var quickMapBase_1 = __webpack_require__(/*! ./quickMapBase */ 2);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var mapMove_1 = __webpack_require__(/*! ./mapMove */ 6);
-	var mapPopup_1 = __webpack_require__(/*! ./mapPopup */ 11);
-	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) {
-	    var m = quickMapBase_1.quickMapBase(options);
-	    mapMove_1.default.init(m);
-	    mapPopup_1.default.init(m);
-	    return m;
-	}
-	exports.quickMap = quickMap;
-	nm.quickMap = quickMap;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMap;
-
-
-/***/ },
-/* 2 */
-/*!****************************************!*\
-  !*** ./dist/olHelpers/quickMapBase.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	    options = 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) {
-	    }
-	    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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMapBase;
-
-
-/***/ },
-/* 3 */
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-/* 4 */
-/*!*********************!*\
-  !*** external "ol" ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	module.exports = ol;
-
-/***/ },
-/* 5 */
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-/* 6 */
-/*!***********************************!*\
-  !*** ./dist/olHelpers/mapMove.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapMoveCls_1 = __webpack_require__(/*! ./mapMoveCls */ 7);
-	/**
-	 * The single map move object catch is that it is common to multimap pages
-	 * @type {MapMoveCls}
-	 */
-	exports.mapMove = new mapMoveCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapMove;
-
-
-/***/ },
-/* 7 */
-/*!**************************************!*\
-  !*** ./dist/olHelpers/mapMoveCls.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var checkDefined = __webpack_require__(/*! ../util/checkDefined */ 9);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapMoveCls;
-
-
-/***/ },
-/* 8 */
-/*!**********************************************!*\
-  !*** ./dist/olHelpers/mapInteractionBase.js ***!
-  \**********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 12/8/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapInteractionBase;
-
-
-/***/ },
-/* 9 */
-/*!***********************************!*\
-  !*** ./dist/util/checkDefined.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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 */
-/*!*******************************!*\
-  !*** ./dist/util/makeGuid.js ***!
-  \*******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = makeGuid;
-
-
-/***/ },
-/* 11 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/mapPopup.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapPopupCls_1 = __webpack_require__(/*! ./mapPopupCls */ 12);
-	/**
-	 * The single popup object catch is that it is common to multimap pages
-	 * @type {MapPopupCls}
-	 */
-	exports.mapPopup = new mapPopupCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapPopup;
-
-
-/***/ },
-/* 12 */
-/*!***************************************!*\
-  !*** ./dist/olHelpers/mapPopupCls.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	                }
-	                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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapPopupCls;
-
-
-/***/ },
-/* 13 */
-/*!*******************************************!*\
-  !*** ./dist/layers/LayerRealEarthTile.js ***!
-  \*******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/4/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBaseXyzTile_1 = __webpack_require__(/*! ./LayerBaseXyzTile */ 14);
-	var RealEarthAnimateTile_1 = __webpack_require__(/*! ../mixin/RealEarthAnimateTile */ 17);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerRealEarthTile;
-
-
-/***/ },
-/* 14 */
-/*!*****************************************!*\
-  !*** ./dist/layers/LayerBaseXyzTile.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 12/4/2015.
-	 */
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	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) {
-	        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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBaseXyzTile;
-
-
-/***/ },
-/* 15 */
-/*!**********************************!*\
-  !*** ./dist/layers/LayerBase.js ***!
-  \**********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var zoomResolutionConvert = __webpack_require__(/*! ../olHelpers/zoomResolutionConvert */ 16);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBase;
-
-
-/***/ },
-/* 16 */
-/*!*************************************************!*\
-  !*** ./dist/olHelpers/zoomResolutionConvert.js ***!
-  \*************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/14/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ },
-/* 17 */
-/*!********************************************!*\
-  !*** ./dist/mixin/RealEarthAnimateTile.js ***!
-  \********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 12/4/2015.
-	 */
-	var RealEarthAnimate_1 = __webpack_require__(/*! ./RealEarthAnimate */ 18);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = RealEarthAnimateTile;
-
-
-/***/ },
-/* 18 */
-/*!****************************************!*\
-  !*** ./dist/mixin/RealEarthAnimate.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 12/4/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var mapPopup_1 = __webpack_require__(/*! ../olHelpers/mapPopup */ 11);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = RealEarthAnimate;
-
-
-/***/ },
-/* 19 */
-/*!***************************************!*\
-  !*** ./dist/domUtil/media-control.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/2/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var range_change_1 = __webpack_require__(/*! ./range-change */ 20);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-
-
-/***/ },
-/* 20 */
-/*!**************************************!*\
-  !*** ./dist/domUtil/range-change.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ },
-/* 21 */
-/*!********************************************!*\
-  !*** ./dist/layers/LayerBaseVectorEsri.js ***!
-  \********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/2/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBaseVector_1 = __webpack_require__(/*! ./LayerBaseVector */ 22);
-	var esriToOl = __webpack_require__(/*! ../olHelpers/esriToOlStyle */ 23);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBaseVectorEsri;
-
-
-/***/ },
-/* 22 */
-/*!****************************************!*\
-  !*** ./dist/layers/LayerBaseVector.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var mapMove_1 = __webpack_require__(/*! ../olHelpers/mapMove */ 6);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBaseVector;
-
-
-/***/ },
-/* 23 */
-/*!*****************************************!*\
-  !*** ./dist/olHelpers/esriToOlStyle.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 1/4/2016.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	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;
-
-
-/***/ },
-/* 24 */
-/*!*******************************************!*\
-  !*** ./dist/layers/LayerEsriMapServer.js ***!
-  \*******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 12/7/2015.
-	 */
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var esriToOl = __webpack_require__(/*! ../olHelpers/esriToOlStyle */ 23);
-	var mapPopup_1 = __webpack_require__(/*! ../olHelpers/mapPopup */ 11);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerEsriMapServer;
-
-
-/***/ }
-/******/ ]);
+!function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};t.m=e,t.c=o,t.i=function(e){return e},t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=34)}([function(e,t,o){"use strict";function n(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),o=window.gv,n=0;n<t.length;n++){void 0===o[t[n]]&&(o[t[n]]={}),o=o[t[n]]}return o}Object.defineProperty(t,"__esModule",{value:!0}),n("util"),window.gv.util.provide=n,t.default=n},function(e,t){e.exports=$},function(e,t){e.exports=ol},function(e,t,o){"use strict";function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}Object.defineProperty(t,"__esModule",{value:!0}),o(0).default("util").makeGuid=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(12);t.mapPopup=new n.default,t.default=t.mapPopup},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=n.default("olHelpers"),a=function(){function e(e){this._map=null,this._initialized=!1,this._subtype=e}return e.prototype.init=function(e){this._initialized||(this._map=e,this._initialized=!0)},Object.defineProperty(e.prototype,"map",{get:function(){return this._map},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"initialized",{get:function(){return this._initialized},enumerable:!0,configurable:!0}),e.prototype._checkInit=function(){if(!this.initialized){var e=this._subtype+" object not initialized";throw alert(e),console.log(e),e}},e.prototype.checkInit=function(){this._checkInit()},e}();t.MapInteractionBase=a,r.MapInteractionBase=a,t.default=a},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(11);t.mapMove=new n.default,t.default=t.mapMove},function(e,t,o){"use strict";function n(e){var t=r.quickMapBase(e);return i.default.init(t),l.default.init(t),t}Object.defineProperty(t,"__esModule",{value:!0});var r=o(13),a=o(0),i=o(6),l=o(4),s=a.default("olHelpers");t.quickMap=n,s.quickMap=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(14),r=o(0),a=o(3),i=o(1),l=r.default("layers"),s=function(){function e(e,t){if(void 0===t&&(t={}),t=t||{},"string"!=typeof e)throw"Invalid URL";this._url=e,this._params="object"==typeof t.params?t.params:{},this._legendCollapse="boolean"==typeof t.legendCollapse&&t.legendCollapse,this._legendCheckbox="boolean"!=typeof t.legendCheckbox||t.legendCheckbox,this.id=t.id||a.default(),this._name=t.name||"Unnamed Layer",this.animate=!1,this._opacity="number"==typeof t.opacity?t.opacity:1,this._opacity>1?this._opacity=1:this._opacity<0&&(this._opacity=0),this._visible="boolean"!=typeof t.visible||t.visible,this._source=void 0,this._olLayer=void 0,this._loaded=!1,this._maxResolution=n.zoomToResolution(t.minZoom),void 0!==this._maxResolution&&(this._maxResolution+=1e-5),this._minResolution=n.zoomToResolution(t.maxZoom),this._minZoom="number"==typeof t.minZoom?t.minZoom:void 0,this._maxZoom="number"==typeof t.maxZoom?t.maxZoom:void 0,this._zIndex="number"==typeof t.zIndex?t.zIndex:0,this.loadCallback="function"==typeof t.loadCallback?t.loadCallback:function(){},this._legendContent="",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>"):this._legendContent+='<label class="legend-layer-name">'+this.name+"</label>",this._$legendDiv=null,this._applyCollapseCalled=!1,this._addLegendContent("string"==typeof t.legendContent?t.legendContent:void 0)}return e.prototype._load=function(){return 1==this.loaded||(this._loaded=!0,!1)},e.prototype.getLegendDiv=function(){return'<div class="legend-layer-div" id="'+this.id+'-legend-layer-div">'+this._legendContent+"</div>"},e.prototype._addLegendContent=function(e){void 0===e&&(e=""),e.indexOf("<ul>")>-1&&(e='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'+e),this._legendContent+=e,this._$legendDiv=i("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0&&(this._$legendDiv.append(e),this.applyCollapse())},e.prototype.addLegendContent=function(e){this._addLegendContent(e)},e.prototype.applyCollapse=function(){if(this._applyCollapseCalled)return void console.log("collapse already applied");if(this._$legendDiv=i("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0){var e=this._$legendDiv.find(".legend-items-expander");e.length>0&&(this._applyCollapseCalled=!0,e.click(function(){var e=i(this);e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this._legendCollapse&&e.trigger("click"))}},e.prototype.refresh=function(){this.source&&this.source.refresh()},Object.defineProperty(e.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"animate",{get:function(){return this._animate},set:function(e){this._animate=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"legendContent",{get:function(){return this._legendContent},set:function(e){this._legendContent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"params",{get:function(){return this._params},set:function(e){this._params=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minResolution",{get:function(){return this._minResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxResolution",{get:function(){return this._maxResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minZoom",{get:function(){return this._minZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxZoom",{get:function(){return this._maxZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"visible",{get:function(){return this._visible},set:function(e){this.setVisible(e)},enumerable:!0,configurable:!0}),e.prototype.setVisible=function(e){this._visible=e,this.olLayer&&(this.olLayer.setVisible(this._visible),e&&!this._loaded&&this._load())},Object.defineProperty(e.prototype,"opacity",{get:function(){return this._opacity},set:function(e){this._opacity=e,this.olLayer&&this.olLayer.setOpacity(this._opacity)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"loaded",{get:function(){return this._loaded},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),e.prototype.getSource=function(){return this._source},Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(e){this._zIndex=e},enumerable:!0,configurable:!0}),e.prototype.setZIndex=function(e){},Object.defineProperty(e.prototype,"olLayer",{get:function(){return this.getOlLayer()},enumerable:!0,configurable:!0}),e.prototype.getOlLayer=function(){return this._olLayer},e}();t.LayerBase=s,l.LayerBase=s,t.default=s},function(e,t,o){"use strict";function n(e){return void 0===e||null===e}function r(e){return!n(e)}Object.defineProperty(t,"__esModule",{value:!0});var a=o(0),i=a.default("util.checkDefined");t.undefinedOrNull=n,i.undefinedOrNull=n,t.definedAndNotNull=r,i.definedAndNotNull=r},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(8),a=o(16),i=o(4),l=o(0),s=o(2),p=o(1),u=l.default("layers"),c=function(e){function t(t,o){void 0===o&&(o={});var n=e.call(this,t,o)||this;return n._source=new s.source.TileArcGISRest({url:""==n.url?void 0:n.url,params:void 0===o.showLayers?void 0:{layers:"show:"+o.showLayers.join(",")}}),n._olLayer=new s.layer.Tile({source:n._source,visible:n.visible,opacity:n.opacity,minResolution:n._minResolution,maxResolution:n._maxResolution}),n._olLayer.setZIndex(n._zIndex),o.addPopup="boolean"==typeof o.addPopup&&o.addPopup,n._esriFormat=new s.format.EsriJSON,n._popupRequest=null,n.addLegendContent(),o.addPopup&&i.default.addMapServicePopup(n),n}return n(t,e),t.prototype.addLegendContent=function(t){var o=this,n=this.url;"/"!==n[n.length-1]&&(n+="/"),n+="legend?f=pjson&callback=?",p.get(n,{},function(t){var n=a.makeMapServiceLegend(t);e.prototype.addLegendContent.call(o,n)},"json")},t.prototype.getPopupInfo=function(e){if(this.visible){var t=this.url;"/"!=t[t.length-1]&&(t+="/"),t+="identify?callback=?";var o=this;null!=this._popupRequest&&this._popupRequest.abort(),this._popupRequest=p.get(t,e,function(e){for(var t=0,n=e.results;t<n.length;t++){var r=n[t],a='<table class="esri-popup-table">';for(var l in r.attributes)if(r.attributes.hasOwnProperty(l)){var s=r.attributes[l];if(null==s||"null"==s.toString().toLowerCase())continue;var p=l;p.length>14&&(p=p.slice(0,11)+"..."),a+="<tr><td>"+p+"</td><td>"+s+"</td></tr>"}a+="</table>",i.default.addMapServicePopupContent(o._esriFormat.readFeature(r),o,a,r.layerName)}},"json"),this._popupRequest.always(function(){o._popupRequest=null})}},Object.defineProperty(t.prototype,"source",{get:function(){return e.prototype.getSource.call(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return e.prototype.getOlLayer.call(this)},enumerable:!0,configurable:!0}),t}(r.LayerBase);t.LayerEsriMapServer=c,u.LayerEsriMapServer=c,t.default=c},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),a=o(9),i=o(0),l=o(3),s=o(1),p=i.default("olHelpers"),u=function(e){function t(){var t=e.call(this,"map move")||this;return t._arrLyrRequest=[],t._arrLyrTimeout=[],t._arrLayer=[],t._lookupLayer={},t._mapMoveCallbacks=[],t._mapMoveCallbacksLookup={},t._mapMoveCallbackDelays=[],t._mapMoveCallbackContext=[],t._mapMoveCallbackTimeout=[],t._mapExtent=void 0,t._zoomLevel=void 0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t),this.map.getView().on(["change:center","change:resolution"],function(e){o._updateMapExtent();for(var t=0;t<o._arrLayer.length;t++)o.triggerLyrLoad(o._arrLayer[t],t,e.type);for(var t=0;t<o._mapMoveCallbacks.length;t++)o.triggerMoveCallback(t,e.type)})},t.prototype._updateMapExtent=function(){var e=this.map.getView();this._zoomLevel=e.getZoom();var t=e.calculateExtent(this.map.getSize());this._mapExtent={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3]}},Object.defineProperty(t.prototype,"mapExtent",{get:function(){return this._mapExtent||this._updateMapExtent(),this._mapExtent},enumerable:!0,configurable:!0}),t.prototype.triggerLyrLoad=function(e,t,o){if(a.undefinedOrNull(e)&&a.undefinedOrNull(t))throw"need to define lyr or index";a.definedAndNotNull(e)&&a.undefinedOrNull(t)?t=this._arrLayer.indexOf(e):a.undefinedOrNull(e)&&a.definedAndNotNull(t)&&(e=this._arrLayer[t]),null!=this._arrLyrTimeout[t]&&(clearTimeout(this._arrLyrTimeout[t]),this._arrLyrTimeout[t]=null),null!=this._arrLyrRequest[t]&&4!=this._arrLyrRequest[t]&&(this._arrLyrRequest[t].abort(),this._arrLyrRequest[t]=null);var n=function(){};if(e.mapMoveBefore(this._zoomLevel,o)){e.mapMoveMakeGetParams(this._mapExtent,this._zoomLevel);var r=this;n=function(){function o(e,t){var o=this;this._arrLyrRequest[t]=s.get(e.url,e.mapMoveParams,function(t){e.mapMoveCallback(t),e.loadCallback()},"json").fail(function(t){"abort"!=t.statusText&&(console.log("failed"),console.log(e.url),console.log(e.mapMoveParams))}).always(function(){o._arrLyrTimeout[t]=null,o._arrLyrRequest[t]=null})}o.call(r,e,t)}}else e.clear();this._arrLyrTimeout[t]=setTimeout(n,e.onDemandDelay)},t.prototype.triggerMoveCallback=function(e,t,o){if(void 0===e&&void 0===o)throw"either the function index or the id must be defined";if("number"!=typeof e&&(e=this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[o])),e<0)return void console.log("function not found");null!=this._mapMoveCallbackTimeout[e]&&(clearTimeout(this._mapMoveCallbackTimeout[e]),this._mapMoveCallbackTimeout[e]=null);var n=this._mapMoveCallbackContext[e],r=this._mapMoveCallbacks[e],a=this,i=function(){null!==n?r.call(n,a._mapExtent,a._zoomLevel,t):r(a._mapExtent,a._zoomLevel,t)};this._mapMoveCallbackTimeout[e]=setTimeout(i,this._mapMoveCallbackDelays[e])},t.prototype.addVectorLayer=function(e,t){if(void 0===t&&(t=!0),this._arrLayer.indexOf(e)>-1)return void console.log("already added "+e.name+" to map move");this._checkInit(),this._arrLyrRequest.push(null),this._arrLyrTimeout.push(null),this._arrLayer.push(e),this._lookupLayer[e.id]=e,(t="boolean"!=typeof t||t)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerLyrLoad(e,this._arrLayer.length-1))},t.prototype.addCallback=function(e,t,o,n,r){if(this._mapMoveCallbacks.indexOf(e)>-1)return void console.log("this function already added to map move");this._checkInit(),r||(r=l.default()),this._mapMoveCallbacks.push(e),this._mapMoveCallbacksLookup[r]=r,this._mapMoveCallbackDelays.push("number"==typeof o?o:50),this._mapMoveCallbackContext.push(a.definedAndNotNull(t)?t:null),this._mapMoveCallbackTimeout.push(null),(n="boolean"!=typeof n||n)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerMoveCallback(this._mapMoveCallbacks.length-1))},t}(r.default);t.MapMoveCls=u,p.MapMoveCls=u,t.default=u},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),a=o(0),i=o(2),l=o(1),s=a.default("olHelpers"),p=function(){function e(e,t,o,n,r){this.feature=e,this.layer=t,this.layerIndex=o,this.selectionLayer=n,this.popupContent="",this.esriLayerName="string"==typeof r?r:void 0}return Object.defineProperty(e.prototype,"layerName",{get:function(){return"string"==typeof this.esriLayerName?this.esriLayerName:this.layer.name},enumerable:!0,configurable:!0}),e}();t.FeatureLayerProperties=p;var u=function(e){function t(){var t=e.call(this,"map popup")||this;return t._arrPopupLayerIds=[],t._arrPopupLayerNames=[],t._arrPopupLayers=[],t._arrPopupOlLayers=[],t._arrPopupContentFunction=[],t._$popupContainer=void 0,t._$popupContent=void 0,t._$popupCloser=void 0,t._popupOverlay=void 0,t._selectionLayers=[],t._selectionLayerLookup={},t._mapClickFunctions=[],t._popupChangedFunctions=[],t._esriMapServiceLayers=[],t._popupOpen=!1,t._popupCoordinate=null,t._passThroughLayerFeatureArray=[],t._currentPopupIndex=-1,t._popupContentLength=0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t);var n,r=this.map.getTarget();n=l("string"==typeof r?"#"+r:r),n.append('<div class="ol-popup"><span class="ol-popup-closer">X</span><div class="popup-content"></div></div>'),this._$popupContainer=n.find(".ol-popup"),this._$popupContent=n.find(".popup-content"),this._$popupCloser=n.find(".ol-popup-closer");var a=function(e){return i.easing.inAndOut(e)};return this._popupOverlay=new i.Overlay({element:this._$popupContainer[0],autoPan:!0,autoPanAnimation:{duration:250,source:t.getView().getCenter(),easing:a}}),this._map.addOverlay(this._popupOverlay),this._$popupCloser.click(function(e){o.closePopup()}),this._map.on("singleclick",function(e){if(o.closePopup(),o._popupCoordinate=e.coordinate,o._esriMapServiceLayers.length>0)for(var t={geometry:e.coordinate.join(","),geometryType:"esriGeometryPoint",layers:"all",sr:o._map.getView().getProjection().getCode().split(":")[1],mapExtent:o._map.getView().calculateExtent(o._map.getSize()).join(","),imageDisplay:o._map.getSize().join(",")+",96",returnGeometry:!0,tolerance:15,f:"pjson"},n=0,r=o._esriMapServiceLayers;n<r.length;n++){var a=r[n];a.getPopupInfo(t)}var i=o._featuresAtPixel(e.pixel);o._passThroughLayerFeatureArray=[],o._currentPopupIndex=-1;for(var l=0;l<i.length;l++){var s=i[l],p=s.feature.getProperties(),u=o._arrPopupContentFunction[s.layerIndex](p,o._$popupContent);u===!1||("string"==typeof u?(s.popupContent=u,o._passThroughLayerFeatureArray.push(s)):s.selectionLayer.getSource().addFeature(s.feature))}o._popupContentLength=o._passThroughLayerFeatureArray.length,o._currentPopupIndex=-1;var c='<div class="ol-popup-nav">';c+='<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>',c+='<span class="next-popup ol-popup-nav-arrow">&#9654;</span>',c+='<span class="current-popup-item-number" style="font-weight: bold;"></span>',c+="<span>&nbsp;of&nbsp;</span>",c+='<span class="popup-content-length" style="font-weight: bold;">'+o._popupContentLength+"</span>",c+="<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>",c+='<span class="current-popup-layer-name"></span>',c+="</div>",c+='<div class="ol-popup-inner">',c+="</div>",o._$popupContent.html(c),o._$popupContent.find(".previous-popup").click(function(){1!=o._popupContentLength&&(0==o._currentPopupIndex?o._currentPopupIndex=o._popupContentLength-1:o._currentPopupIndex--,o._triggerFeatSelect())});var d=o._$popupContent.find(".next-popup");d.click(function(){1==o._popupContentLength&&o._currentPopupIndex>-1||(o._currentPopupIndex==o._popupContentLength-1?o._currentPopupIndex=0:o._currentPopupIndex++,o._triggerFeatSelect())}),o._popupContentLength>0&&(d.trigger("click"),o._popupOverlay.setPosition(o._popupCoordinate),o._$popupContent.scrollTop(0),o._popupOpen=!0)}),this._map.on("pointermove",function(e){if(!e.dragging){var t=o.map.getEventPixel(e.originalEvent),n=o.map.hasFeatureAtPixel(t,function(e){for(var t=0,n=o._arrPopupOlLayers;t<n.length;t++){if(e==n[t])return!0}return!1});o.map.getTargetElement().style.cursor=n?"pointer":""}}),!0},t.prototype._triggerFeatSelect=function(){var e=this._$popupContent.find(".current-popup-item-number"),t=this._$popupContent.find(".ol-popup-inner"),o=this._$popupContent.find(".current-popup-layer-name");this.clearSelection();var n=this._passThroughLayerFeatureArray[this._currentPopupIndex];e.html((this._currentPopupIndex+1).toFixed()),o.html(n.layerName),t.html(n.popupContent),n.selectionLayer.getSource().addFeature(n.feature);for(var r=0,a=this._popupChangedFunctions;r<a.length;r++){(0,a[r])(this._$popupContent)}},t.prototype.addMapServicePopupContent=function(e,t,o,n){var r=new p(e,t,this._popupContentLength,this._selectionLayerLookup[t.id],n);r.popupContent=o,this._passThroughLayerFeatureArray.push(r),this._popupContentLength++,l(".popup-content-length").html(this._popupContentLength.toFixed()),this._popupOpen||(this._$popupContent.find(".next-popup").trigger("click"),this._popupOverlay.setPosition(this._popupCoordinate),this._$popupContent.scrollTop(0),this._popupOpen=!0)},t.prototype._featuresAtPixel=function(e){var t=this,o=[];return this.map.forEachFeatureAtPixel(e,function(e,n){var r=t._arrPopupOlLayers.indexOf(n);r>-1&&o.push(new p(e,t._arrPopupLayers[r],r,t._selectionLayers[r]))}),o},t.prototype.closePopup=function(){return this._checkInit(),this._popupOpen=!1,this._popupOverlay.setPosition(void 0),this._$popupCloser[0].blur(),this.clearSelection(),this._$popupContent.html(""),!1},t.prototype.addPopupChangedFunction=function(e){this._popupChangedFunctions.push(e)},t.prototype._addPopupLayer=function(e,t){this._checkInit(),t=t||{},t.color=t.color||"rgba(255,170,0,0.5)",t.width=t.width||10;var o;o=t.olStyle?t.olStyle:new i.style.Style({stroke:new i.style.Stroke({color:t.color,width:t.width}),image:new i.style.Circle({radius:7,fill:new i.style.Fill({color:t.color}),stroke:new i.style.Stroke({color:t.color,width:1})}),fill:new i.style.Fill({color:t.color})});var n=new i.layer.Vector({source:new i.source.Vector,style:o});return n.setZIndex(100),this._selectionLayers.push(n),this._selectionLayerLookup[e.id]=n,this.map.addLayer(n),n},t.prototype.addVectorPopup=function(e,t,o){var n=this._addPopupLayer(e,o);return this._arrPopupLayerIds.push(e.id),this._arrPopupLayerNames.push(e.name),this._arrPopupLayers.push(e),this._arrPopupOlLayers.push(e.olLayer),this._arrPopupContentFunction.push(t),n},t.prototype.removeVectorPopup=function(e){var t=this._arrPopupLayerIds.indexOf(e.id);t>-1&&(this._arrPopupLayerIds.splice(t,1),this._arrPopupLayerNames.splice(t,1),this._arrPopupLayers.splice(t,1),this._arrPopupOlLayers.splice(t,1),this._arrPopupContentFunction.splice(t,1),this._selectionLayers.splice(t,1),delete this._selectionLayerLookup[e.id])},t.prototype.addMapServicePopup=function(e,t){var o=this._addPopupLayer(e,t);return this._esriMapServiceLayers.push(e),o},t.prototype.clearSelection=function(){this._checkInit();for(var e=0;e<this._selectionLayers.length;e++)this._selectionLayers[e].getSource().clear();for(var t=0,o=this._mapClickFunctions;t<o.length;t++){(0,o[t])()}},t.prototype.addMapClickFunction=function(e){this._mapClickFunctions.push(e)},t}(r.default);t.MapPopupCls=u,s.MapPopupCls=u,t.default=u},function(e,t,o){"use strict";function n(e){e=e||{},e.divId=e.divId||"map",e.center=e.center||{x:-10018378,y:5574910},e.zoom="number"==typeof e.zoom?e.zoom:7,e.baseSwitcher="boolean"!=typeof e.baseSwitcher||e.baseSwitcher,e.fullScreen="boolean"==typeof e.fullScreen&&e.fullScreen,i("#"+e.divId).css("position","relative");var t=new a.layer.Tile({source:new a.source.OSM});if(e.baseSwitcher,e.zoom<0||e.zoom>28)throw"zoom out of range";if(e.center.x>=-180&&e.center.x<=180&&e.center.y>=-90&&e.center.y<=90){var o=new a.geom.Point([e.center.x,e.center.y]);new a.proj.Projection({code:"EPSG:4326"}),o.transform(new a.proj.Projection({code:"EPSG:4326"}),new a.proj.Projection({code:"EPSG:3857"}));var n=o.getCoordinates();e.center.x=n[0],e.center.y=n[1]}var r=a.control.defaults({attributionOptions:{collapsible:!1}}),l=new a.View({center:[e.center.x,e.center.y],zoom:e.zoom,minZoom:e.minZoom,maxZoom:e.maxZoom}),s=new a.Map({layers:[t],target:e.divId,controls:r,view:l});return e.fullScreen&&s.addControl(new a.control.FullScreen({})),s}Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),a=o(2),i=o(1),l=r.default("olHelpers");t.quickMapBase=n,l.quickMapBase=n,t.default=n},function(e,t,o){"use strict";function n(e){return"number"==typeof e?e%1==0&&e>=0&&e<=28?l[e]:void console.log("invalid zoom level provided: "+e):void 0}function r(e){for(var t=0;t<l.length;t++)if(e>=l[t])return t;return 0}Object.defineProperty(t,"__esModule",{value:!0});var a=o(0),i=a.default("olHelpers.zoomResolutionConvert"),l=[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,.5971642834779395,.29858214173896974,.14929107086948487,.07464553543474244,.03732276771737122,.01866138385868561,.009330691929342804,.004665345964671402,.002332672982335701,.0011663364911678506,.0005831682455839253];t.zoomToResolution=n,i.zoomToResolution=n,t.resolutionToZoom=r,i.resolutionToZoom=r},function(e,t){e.exports=jquery-ui},function(e,t,o){"use strict";function n(e,t){return"rgba("+e[0]+","+e[1]+","+e[2]+","+t+")"}function r(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function a(e){var t=e.drawingInfo.renderer,o=null;switch(t.type){case"simple":switch(e.geometryType){case"esriGeometryPoint":o=new _(e,y);break;case"esriGeometryPolyline":o=new _(e,h);break;case"esriGeometryPolygon":o=new _(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;case"uniqueValue":switch(e.geometryType){case"esriGeometryPoint":o=new v(e,y);break;case"esriGeometryPolyline":o=new v(e,h);break;case"esriGeometryPolygon":o=new v(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;default:alert("not handled renderer type: "+t.type)}return null==o?{style:void 0,legend:""}:{style:o.olStyle,legend:o.legendHtml}}function i(e,t){void 0===t&&(t=!1),t="boolean"==typeof t&&t;var o=e.layerName,n=e.legend,a="";if(t||(a+='<span class="legend-layer-subitem">'+o+"</span>"),1==n.length)a='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[0].imageData+'">';else{t||(a+='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'),a+="<ul>";for(var i=0;i<n.length;i++)a+="<li>",a+='<span class="legend-layer-subitem">'+r(n[i].label)+"</span>",a+='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[i].imageData+'">',a+="</li>";a+="</ul>"}return t||(a='<span class="legend-layer-subitem">'+o+"</span>"+a),a}function l(e){var t="",o=e.layers;if(1==o.length)t+=i(o[0],!0);else{t+="<ul>";for(var n=0;n<o.length;n++)t+="<li>"+i(o[n])+"</li>";t+="</ul>"}return t}var s=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var p=o(0),u=o(2),c=p.default("olHelpers.esriToOlStyle");c.htmlEscape=r;var d=function(){function e(e,t){this.symbolObj=e,this.opacity=t,this.olStyle=void 0,this.legendHtml=""}return e}(),y=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSMS":var a=n(r.symbolObj.color,r.opacity),i=n(r.symbolObj.outline.color,r.opacity),l=r.symbolObj.outline.width,s=r.symbolObj.size;r.olStyle=new u.style.Style({image:new u.style.Circle({radius:s,fill:new u.style.Fill({color:a}),stroke:new u.style.Stroke({color:i,width:l})})}),r.legendHtml='<span class="legend-layer-icon" style="color: '+a+'">&#9679;</span>';break;case"esriPMS":r.olStyle=new u.style.Style({image:new u.style.Icon({src:"data:image/png;base64,"+r.symbolObj.imageData})}),r.legendHtml='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+r.symbolObj.imageData+'">';break;default:console.log(r.symbolObj),alert("Point symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),h=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSLS":var a=n(r.symbolObj.color,r.opacity),i=r.symbolObj.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:a,width:i})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+a+";",r.legendHtml+="width: 40px;",r.legendHtml+="height: 4px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: -1px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Line symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),f=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSFS":var a=n(r.symbolObj.color,r.opacity),i=n(r.symbolObj.outline.color,r.opacity),l=r.symbolObj.outline.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:i,width:l}),fill:new u.style.Fill({color:a})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+a+";",r.legendHtml+="border: solid "+i+" 1px;",r.legendHtml+="width: 40px;",r.legendHtml+="height: 9px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: 2px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Polygon symbol does handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),m=function(){function e(e){this.opacity=(100-(e.drawingInfo.transparency||0))/100,this.renderer=e.drawingInfo.renderer,this.olStyle=void 0,this.legendHtml=""}return e}(),_=function(e){function t(t,o){var n=e.call(this,t)||this;n.symbol=n.renderer.symbol;var r=new o(n.symbol,n.opacity);return n.olStyle=r.olStyle,n.legendHtml=r.legendHtml,n}return s(t,e),t}(m),v=function(e){function t(t,o){var n=e.call(this,t)||this;if(n.uniqueValueInfos=n.renderer.uniqueValueInfos,n.propertyName=n.renderer.field1,n.defaultSymbol=n.renderer.defaultSymbol,n.defaultSymbol){var a=new o(n.defaultSymbol,n.opacity);n.defaultStyle=a.olStyle,n.defaultLabelHtml='<span class="legend-layer-subitem">'+r(n.renderer.defaultLabel)+"</span>"+a.legendHtml}else n.defaultStyle=void 0,n.defaultLabelHtml="other";n.valueArray=[],n.labelArray=[],n.legendArray=[],n.propertyStyleLookup={};for(var i=0,l=n.uniqueValueInfos;i<l.length;i++){var s=l[i];n.labelArray.push(s.label),n.valueArray.push(s.value);var p=new o(s.symbol,n.opacity);n.legendArray.push('<span class="legend-layer-subitem">'+r(s.label)+"</span>"+p.legendHtml),n.propertyStyleLookup[s.value]=p.olStyle}n.olStyle=function(e){var t=e.getProperties(),o=t[n.propertyName];return void 0!==n.propertyStyleLookup[o]?[n.propertyStyleLookup[o]]:[n.defaultStyle]},null!==n.defaultLabelHtml&&n.legendArray.push(n.defaultLabelHtml),n.legendHtml="<ul>";for(var u=0,c=n.legendArray;u<c.length;u++){var d=c[u];n.legendHtml+="<li>"+d+"</li>"}return n.legendHtml+="</ul>",n}return s(t,e),t}(m);t.makeFeatureServiceLegendAndSymbol=a,c.makeFeatureServiceLegendAndSymbol=a,t.makeMapServiceLegend=l,c.makeMapServiceLegend=l},,function(e,t,o){"use strict";function n(e){var t=new Date(e),o=t.toLocaleTimeString().split(" "),n=o[0].split(":");return n=n.slice(0,2),t.toLocaleDateString()+"<br>"+n.join(":")+" "+o[1]}Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),a=o(19),i=o(1),l=r.default("domUtil"),s=function(){function e(e,t,o){void 0===t&&(t=function(){}),void 0===o&&(o={});var n=this;o.min="number"==typeof o.min?o.min:0,o.max="number"==typeof o.max?o.max:100,o.val="number"==typeof o.val?o.val:0,o.step="number"==typeof o.step?o.step:5,o.playInterval="number"==typeof o.playInterval?o.playInterval:500,o.showAsDate="boolean"==typeof o.showAsDate&&o.showAsDate,"string"==typeof e?this._container=i("#"+e):void 0!==e.style?this._container=i(e):this._container=e,this._container.addClass("media-control-container"),this._playInterval=o.playInterval,this._changeFunc=t,this._showAsDate=o.showAsDate,this._currentValue=void 0,this._min=void 0,this._max=void 0,this._step=void 0,this._playing=!1,this._container.append('<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>');var r=this._container.find(".media-play");this._$btnStop=this._container.find(".media-stop");var l=this._container.find(".media-ahead"),s=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(o.min,o.max,o.val,o.step),a.rangeChange(this._$slider,function(e){n.currentValue=e},100);var p=this;r.click(function(){i(this).addClass("media-disabled"),p._$btnStop.removeClass("media-disabled"),l.addClass("media-locked"),s.addClass("media-locked"),p._$slider.prop("disabled",!0),p._playing=!0,p._interval=setInterval(function(){p.currentValue+=p._step},p._playInterval)}),this._$btnStop.click(function(){clearInterval(p._interval),i(this).addClass("media-disabled"),r.removeClass("media-disabled"),l.removeClass("media-locked"),s.removeClass("media-locked"),p._$slider.prop("disabled",!1),p._playing=!1}),l.click(function(){p.currentValue=p.currentValue+p._step}),s.click(function(){p.currentValue=p.currentValue-p._step})}return e.prototype.stopPlaying=function(){this._playing&&this._$btnStop.trigger("click")},Object.defineProperty(e.prototype,"playing",{get:function(){return this._playing},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"min",{get:function(){return this._min},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"max",{get:function(){return this._max},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"step",{get:function(){return this._step},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"currentValue",{get:function(){return this._currentValue},set:function(e){e>this._max?e=this._min:e<this._min&&(e=this._max),this._currentValue=e,this._$slider.val(this._currentValue.toFixed(2)),this._showAsDate?this._$valLabelVal.html(n(this.currentValue)):this._$valLabelVal.html(this.currentValue.toString()),this._changeFunc(e)},enumerable:!0,configurable:!0}),e.prototype.setMinMaxValueStep=function(e,t,o,r){this._min=e,this._max=t,o="number"==typeof o?o:e,r="number"==typeof r?r:(t-e)/20,this._currentValue=o,this._step=r,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()),this._showAsDate?(this._$valLabelMin.html(n(this._min)),this._$valLabelVal.html(n(this.currentValue)),this._$valLabelMax.html(n(this._max))):(this._$valLabelMin.html(this._min.toString()),this._$valLabelVal.html(this.currentValue.toString()),this._$valLabelMax.html(this._max.toString()))},Object.defineProperty(e.prototype,"changeFunction",{set:function(e){this._changeFunc=e},enumerable:!0,configurable:!0}),e}();t.MediaControl=s,l.MediaControl=s},function(e,t,o){"use strict";function n(e,t){var o=parseFloat(this.value),n=parseFloat(this.min),r=parseFloat(this.max);r-o<parseFloat(this.step)&&(o=r);var i=(o-n)/(r-n);"number"==typeof a&&o==a||(a=o,e(o,i,t))}function r(e,t,o){return o="number"==typeof o?o:75,e.mouseenter(function(){s=!0}),e.mouseleave(function(){s=!1,p=!1}),e.mousedown(function(){p=!0}),e.mouseup(function(){p=!1}),e.mousemove(function(e){if(s&&p&&(c=!0,a!=this.value)){a=this.value,null!=u&&clearTimeout(u);var r=this;u=setTimeout(function(){n.call(r,t,e),u=null},o)}}),e.keyup(function(e){37!=e.keyCode&&39!=e.keyCode||n.call(this,t,e)}),e.change(function(e){if(c)return void(c=!1);n.call(this,t,e)}),this}Object.defineProperty(t,"__esModule",{value:!0});var a,i=o(0),l=i.default("domUtil"),s=!1,p=!1,u=null,c=!1;t.rangeChange=r,l.rangeChange=r},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(8),a=o(6),i=o(0),l=o(2),s=o(1),p=i.default("layers"),u=function(e){function t(t,o){void 0===o&&(o={});var n=e.call(this,t,o)||this;return o=o,""==n.url.trim()&&(n._loaded=!0),n._style=void 0===o.style?void 0:o.style,n.visible?n._autoLoad=!0:n._autoLoad="boolean"==typeof o.autoLoad&&o.autoLoad,n._onDemand="boolean"==typeof o.onDemand&&o.onDemand,n._onDemandDelay="number"==typeof o.onDemandDelay?o.onDemandDelay:300,o.mapMoveObj?n._mapMove=o.mapMoveObj:n._mapMove=n._onDemand?a.default:void 0,n._mapMoveMakeGetParams="function"==typeof o.mapMoveMakeGetParams?o.mapMoveMakeGetParams:function(){return{}},n._onDemand&&(n._loaded=!0,n._mapMoveParams={},n._mapMove.checkInit(),n._mapMove.addVectorLayer(n)),n._source=new l.source.Vector,n._olLayer=new l.layer.Vector({source:n._source,visible:n.visible,style:n.style,minResolution:n._minResolution,maxResolution:n._maxResolution,renderOrder:o.renderOrder}),n.olLayer.setZIndex(n._zIndex),n._projectionMap=null,n._projection4326=new l.proj.Projection({code:"EPSG:4326"}),n}return n(t,e),t.prototype.addFeatures=function(e){console.log("Layer vector base addFeatures is a placeholder and does nothing")},t.prototype.mapMoveBefore=function(e,t){return!(void 0!==this.minZoom&&e<this.minZoom)&&(!(void 0!==this.maxZoom&&e>this.maxZoom)&&this.visible)},t.prototype.mapMoveMakeGetParams=function(e,t){this._mapMoveParams={},s.extend(this._mapMoveParams,this.params),s.extend(this._mapMoveParams,this._mapMoveMakeGetParams(this,e,t))},t.prototype.mapMoveCallback=function(e){this.source&&this._source.clear()},t.prototype.clear=function(){this._source&&this._source.clear()},Object.defineProperty(t.prototype,"onDemandDelay",{get:function(){return this._onDemandDelay},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"autoLoad",{get:function(){return this._autoLoad},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"style",{get:function(){return this._style},set:function(e){this._style=e,this.olLayer.setStyle(this._style)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapCrs",{get:function(){return null==this.mapProj?null:this.mapProj.getCode()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapProj",{get:function(){return null!=this._projectionMap?this._projectionMap:this._mapMove?(this._projectionMap=this._mapMove.map.getView().getProjection(),this._projectionMap):null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapMove",{get:function(){return this._mapMove},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapMoveParams",{get:function(){return this._mapMoveParams},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this._visible},set:function(t){e.prototype.setVisible.call(this,t),this._onDemand&&this.mapMove.triggerLyrLoad(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"features",{get:function(){return this.source.getFeatures()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return e.prototype.getOlLayer.call(this)},enumerable:!0,configurable:!0}),t.prototype.setZIndex=function(e){this.olLayer.setZIndex(e)},t}(r.LayerBase);t.LayerBaseVector=u,p.LayerBaseVector=u,t.default=u},,,,,function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(20),a=o(16),i=o(0),l=o(2),s=o(1),p=i.default("layers"),u=function(e){function t(t,o){var n=this;return"object"!=typeof o.params&&(o.params={}),o.params.where=o.where||"1=1",o.params.outFields=o.outFields||"*",o.params.f=o.format||"pjson",o.params.outSR=o.outSR||3857,n=e.call(this,t,o)||this,n._outSR=n.params.outSR,n._esriFormat=new l.format.EsriJSON,"/"!==n._url[n._url.length-1]&&(n._url+="/"),n._urlCopy=n.url,n._url+="query?callback=?",(n.autoLoad||n.visible)&&n._load(),n._useEsriStyle="boolean"==typeof o.useEsriStyle&&o.useEsriStyle,n._useEsriStyle&&n.addLegendContent(),n}return n(t,e),t.prototype.addLegendContent=function(t){var o=this;this._useEsriStyle?s.get(this._urlCopy+"?f=pjson&callback=?",{},function(t){if(t.subLayers.length>0)return void alert("should only use single feature layers, not groups");var n=a.makeFeatureServiceLegendAndSymbol(t);o.style=n.style,e.prototype.addLegendContent.call(o,n.legend)},"json"):e.prototype.addLegendContent.call(this,t)},t.prototype.addFeatures=function(e){var t=this._esriFormat.readFeatures(e);this.source.addFeatures(t)},t.prototype._load=function(){var t=this;return!!e.prototype._load.call(this)||(s.get(this._url,this.params,function(e){t.addFeatures(e),t.loadCallback(t)},"json").fail(function(){t._loaded=!1}),!1)},t.prototype.mapMoveMakeGetParams=function(t,o){e.prototype.mapMoveMakeGetParams.call(this,t,o),this.mapMoveParams.geometry=t.minX+","+t.minY+","+t.maxX+","+t.maxY,this.mapMoveParams.geometryType="esriGeometryEnvelope",this.mapMoveParams.spatialRel="esriSpatialRelIntersects",this.mapMoveParams.spatialRel="esriSpatialRelIntersects",this.mapMoveParams.inSR=3857,3857==this._outSR&&(this.mapMoveParams.geometryPrecision=1)},t.prototype.mapMoveBefore=function(t,o){return e.prototype.mapMoveBefore.call(this,t,o)},t.prototype.mapMoveCallback=function(t){e.prototype.mapMoveCallback.call(this,t),this.source.addFeatures(this._esriFormat.readFeatures(t))},t}(r.LayerBaseVector);t.LayerBaseVectorEsri=u,p.LayerBaseVectorEsri=u,t.default=u},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(29),a=o(32),i=o(0),l=i.default("layers"),s=function(e){function t(t){var o=this;return t.animate="boolean"==typeof t.animate&&t.animate,t.animate?(o=e.call(this,"",t)||this,o._products=t.products,o.animator=new a.default(o,t.timeLoadCallback),o.animator.timeInit()):(o=e.call(this,"http://realearth.ssec.wisc.edu/api/image?products="+t.products+"&x={x}&y={y}&z={z}",t)||this,o._products=t.products),o}return n(t,e),t.prototype.setLayerTime=function(e){return!!this.animator&&this.animator.setLayerTime(e)},t.prototype._load=function(){return!this.animator&&e.prototype._load.call(this)},t}(r.LayerBaseXyzTile);t.LayerRealEarthTile=s,l.LayerRealEarthTile=s,t.default=s},,,function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(8),a=o(0),i=o(2),l=a.default("layers"),s=function(e){function t(t,o){void 0===o&&(o={});var n=e.call(this,t,o)||this;return n._source=new i.source.XYZ({url:""==n.url?void 0:n.url}),n._olLayer=new i.layer.Tile({source:n._source,visible:n.visible,opacity:n.opacity,minResolution:n._minResolution,maxResolution:n._maxResolution}),n._olLayer.setZIndex(n._zIndex),n}return n(t,e),Object.defineProperty(t.prototype,"source",{get:function(){return this._source},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return this._olLayer},enumerable:!0,configurable:!0}),t}(r.LayerBase);t.LayerBaseXyzTile=s,l.LayerBaseXyzTile=s,t.default=s},,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=o(4),a=o(1),i=n.default("mixin"),l=(new Date).getTimezoneOffset(),s=function(){function e(e,t){this.lyr=e,this._products=e._products,this.loadCallback=t?t:function(){}}return e.prototype.timeInit=function(){var e=this;this._rawDateStrings=[],this._localDates=[],this.localTimes=[],this._animateEnabled=!0,this._currentTime=void 0,this._currentIndex=void 0,a.get("http://realearth.ssec.wisc.edu/api/products",{products:this._products},function(t){if(0==t.length)return void console.log(e._products+" layer not available or does not have times");t=t[0];for(var o=0;o<t.times.length;o++)e._loadDates.call(e,t.times[o]);e.loadCallback.call(e.lyr,e.lyr),e._loadLatest.call(e)},"json")},e.prototype._loadDates=function(e){var t=e.slice(0,4),o=e.slice(4,6),n=e.slice(6,8),r=e.slice(9,11),a=e.slice(11,13),i=e.slice(13,15),s=e.replace(".","_");this._rawDateStrings.push(s);var p=o+"/"+n+"/"+t+" "+r+":"+a+":"+i,u=new Date(p);return u.setMinutes(u.getMinutes()-l),this._localDates.push(u),this.localTimes.push(u.getTime()),s},e.prototype._loadLatest=function(){return r.default.closePopup(),this.localTimes.length>0&&(this._currentIndex=this.localTimes.length-1,!0)},e.prototype.setLayerTime=function(e){this._currentTime=e;var t;if(e<this.localTimes[0])return!1;e>this.localTimes[this.localTimes.length-1]&&(t=this.localTimes.length-1);for(var o=0;o<this.localTimes.length;o++)if(this.localTimes[o]>=e){t=o;break}return t!=this._currentIndex&&(this._currentIndex=t,r.default.closePopup(),!0)},e}();t.RealEarthAnimate=s,i.RealEarthAnimate=s,t.default=s},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(31),a=o(0),i=a.default("mixin"),l=function(e){function t(t,o){var n=e.call(this,t,o)||this;return n._source=t.source,n._olLayer=t.olLayer,n}return n(t,e),t.prototype.timeInit=function(){e.prototype.timeInit.call(this),this._sourceUrls=[]},t.prototype._loadDates=function(t){var o=e.prototype._loadDates.call(this,t),n="http://realearth.ssec.wisc.edu/api/image?products="+this._products+"_"+o+"&x={x}&y={y}&z={z}";return this._sourceUrls.push(n),""},t.prototype._loadLatest=function(){return e.prototype._loadLatest.call(this)&&this._source.setUrl(this._sourceUrls[this._sourceUrls.length-1]),!0},t.prototype.setLayerTime=function(t){return e.prototype.setLayerTime.call(this,t)?(this._olLayer.getZIndex()<0&&this._olLayer.setZIndex(0),this._source.setUrl(this._sourceUrls[this._currentIndex])):this._olLayer.setZIndex(-1),!0},t}(r.default);i.RealEarthAnimateTile=l,t.default=l},,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(7),r=o(26),a=o(18),i=o(1),l=o(25),s=o(10);o(15);var p=new r.default({products:"nexrhres",id:"nexrhres-static",opacity:.6,animate:!0,name:"Hybrid Reflectivity",timeLoadCallback:function(e){console.log(e)}}),u=new Date,c=u.getTime();u.setHours(u.getHours()-4);var d=u.getTime(),y=Math.round((c-d)/8),h=(new a.MediaControl(i("#control"),function(e){p.setLayerTime(e)},{min:d,max:c,val:c,step:y,playInterval:750,showAsDate:!0}),n.quickMap());h.addLayer(p.olLayer);var f=new l.LayerBaseVectorEsri("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0",{visible:!0,autoLoad:!0,name:"Coordination",useEsriStyle:!0});h.addLayer(f.olLayer);for(var m=[["Cameras","cameras33"],["HAR","HAR33"],["DMS","MessageSigns33"],["Traffic Control","TrafficControl33"],["Traffic Detection","TrafficDetectionMulti"],["Weather","Weather33"]],_=0;_<m.length;_++){var v=new s.LayerEsriMapServer("http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/"+m[_][1]+"/MapServer",{id:m[_][1],name:m[_][0],visible:!0,minZoom:7,zIndex:20,addPopup:!0,legendCollapse:!0});h.addLayer(v.olLayer)}}]);
 //# sourceMappingURL=animate.js.map
\ No newline at end of file
diff --git a/test-html/js/animate.js.map b/test-html/js/animate.js.map
index c93d4afc82e2eb92307b5382462bb083943328c2..40a87e865aec27ca6e7bdbe0f20d75bf90884558 100644
--- a/test-html/js/animate.js.map
+++ b/test-html/js/animate.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4","webpack:///./src/_test/animate.ts","webpack:///./src/olHelpers/quickMap.ts","webpack:///./src/olHelpers/quickMapBase.ts","webpack:///./src/util/provide.ts","webpack:///external \"ol\"","webpack:///external \"$\"","webpack:///./src/olHelpers/mapMove.ts","webpack:///./src/olHelpers/mapMoveCls.ts","webpack:///./src/olHelpers/mapInteractionBase.ts","webpack:///./src/util/checkDefined.ts","webpack:///./src/util/makeGuid.ts","webpack:///./src/olHelpers/mapPopup.ts","webpack:///./src/olHelpers/mapPopupCls.ts","webpack:///./src/layers/LayerRealEarthTile.ts","webpack:///./src/layers/LayerBaseXyzTile.ts","webpack:///./src/layers/LayerBase.ts","webpack:///./src/olHelpers/zoomResolutionConvert.ts","webpack:///./src/mixin/RealEarthAnimateTile.ts","webpack:///./src/mixin/RealEarthAnimate.ts","webpack:///./src/domUtil/media-control.ts","webpack:///./src/domUtil/range-change.ts","webpack:///./src/layers/LayerBaseVectorEsri.ts","webpack:///./src/layers/LayerBaseVector.ts","webpack:///./src/olHelpers/esriToOlStyle.ts","webpack:///./src/layers/LayerEsriMapServer.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","import {quickMap} from '../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\n\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// ./src/_test/animate.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\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","/**\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 = options || {} as quickMapOptions;\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/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 = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 4\n// module chunks = 0 2 3 7","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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","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 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","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 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 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 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","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","/**\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/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","/**\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 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","/**\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","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 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/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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///animate.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b","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:///external \"jquery-ui\"","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:///../../src/_test/animate.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","provide","namespace","window","parts","split","nameSpace","length","util","default","$","ol","makeGuid","replace","r","Math","random","toString","mapPopupCls_1","mapPopup","provide_1","nm","MapInteractionBase","subtype","this","_map","_initialized","_subtype","init","theMap","_checkInit","initialized","msg","alert","console","log","checkInit","mapMoveCls_1","mapMove","quickMap","options","quickMapBase_1","quickMapBase","mapMove_1","mapPopup_1","zoomResolutionConvert","makeGuid_1","LayerBase","url","_url","_params","params","_legendCollapse","legendCollapse","_legendCheckbox","legendCheckbox","id","_name","animate","_opacity","opacity","_visible","visible","_source","undefined","_olLayer","_loaded","_maxResolution","zoomToResolution","minZoom","_minResolution","maxZoom","_minZoom","_maxZoom","_zIndex","zIndex","loadCallback","_legendContent","_$legendDiv","_applyCollapseCalled","_addLegendContent","legendContent","_load","loaded","getLegendDiv","additionalContent","indexOf","append","applyCollapse","addLegendContent","$expander","find","click","$this","siblings","slideToggle","hasClass","removeClass","html","addClass","trigger","refresh","source","_id","set","newId","_animate","newVal","newParams","visibility","setVisible","olLayer","setOpacity","newName","getSource","newZ","setZIndex","getOlLayer","undefinedOrNull","input","definedAndNotNull","__extends","extendStatics","setPrototypeOf","__proto__","Array","b","__","constructor","create","LayerBase_1","esriToOl","LayerEsriMapServer","_super","_this","TileArcGISRest","showLayers","layers","join","layer","Tile","minResolution","maxResolution","addPopup","_esriFormat","format","EsriJSON","_popupRequest","addMapServicePopup","urlCopy","newHtml","makeMapServiceLegend","getPopupInfo","queryParams","__this","abort","_i","_a","popupHtml","a","attrVal","toLowerCase","attr","slice","addMapServicePopupContent","readFeature","always","mapInteractionBase_1","checkDefined","MapMoveCls","_arrLyrRequest","_arrLyrTimeout","_arrLayer","_lookupLayer","_mapMoveCallbacks","_mapMoveCallbacksLookup","_mapMoveCallbackDelays","_mapMoveCallbackContext","_mapMoveCallbackTimeout","_mapExtent","_zoomLevel","map","getView","on","e","_updateMapExtent","triggerLyrLoad","type","triggerMoveCallback","theView","getZoom","extentArray","calculateExtent","getSize","minX","minY","maxX","maxY","lyr","index","eventType","clearTimeout","callbackFunc","mapMoveBefore","mapMoveMakeGetParams","__this_1","innerFunction","theLayer","theIndex","_innerThis","mapMoveParams","mapMoveCallback","fail","jqXHR","statusText","clear","setTimeout","onDemandDelay","ind","functionId","ctx","theFunc","f","addVectorLayer","triggerOnAdd","push","addCallback","func","context","delay","FeatureLayerProperties","feature","layerIndex","selectionLayer","esriLayerName","popupContent","MapPopupCls","_arrPopupLayerIds","_arrPopupLayerNames","_arrPopupLayers","_arrPopupOlLayers","_arrPopupContentFunction","_$popupContainer","_$popupContent","_$popupCloser","_popupOverlay","_selectionLayers","_selectionLayerLookup","_mapClickFunctions","_popupChangedFunctions","_esriMapServiceLayers","_popupOpen","_popupCoordinate","_passThroughLayerFeatureArray","_currentPopupIndex","_popupContentLength","$map","target","getTarget","_ease","easing","inAndOut","Overlay","element","autoPan","autoPanAnimation","duration","getCenter","addOverlay","evt","closePopup","geometry","geometryType","sr","getProjection","getCode","mapExtent","imageDisplay","returnGeometry","tolerance","layerFeatureObjectArray","_featuresAtPixel","featObj","props","getProperties","popupContentResponse","addFeature","_triggerFeatSelect","nextPopup","setPosition","scrollTop","pixel","getEventPixel","hit","hasFeatureAtPixel","lyrCandidate","getTargetElement","style","cursor","$currentPopupItemNumber","$innerPopup","$layerNameSpan","clearSelection","lyrFeatObj","toFixed","layerName","esriName","featLayerObject","forEachFeatureAtPixel","lyrIndex","blur","addPopupChangedFunction","chgFunction","_addPopupLayer","selectionStyle","color","width","theStyle","olStyle","Style","stroke","Stroke","image","Circle","radius","fill","Fill","Vector","addLayer","addVectorPopup","popupContentFunction","removeVectorPopup","idx","splice","addMapClickFunction","divId","center","x","y","zoom","baseSwitcher","fullScreen","css","osmLayer","OSM","geom","Point","proj","Projection","code","transform","coordinates","getCoordinates","controls","control","defaults","attributionOptions","collapsible","view","View","Map","addControl","FullScreen","zoomLevel","_zoomResLookup","resolutionToZoom","resolution","jquery","ui","_colorArrayToRgba","colorArray","htmlEscape","str","String","makeFeatureServiceLegendAndSymbol","esriResponse","renderer","drawingInfo","symbolLegendOut","SingleSymbol","PointSymbol","LineSymbol","PolygonSymbol","UniqueValueSymbol","legend","legendHtml","mapServiceLegendItem","lyrObject","skipLayerNameAndExpander","legendItems","newLegendHtml","CommonSymbol","symbolObj","innerColor","outerColor","outline","outlineWidth","size","Icon","src","lineWidth","SymbolGenerator","SymbolClass","symbol","uniqueValueInfos","propertyName","defaultSymbol","defaultStyle","defaultLabelHtml","valueArray","labelArray","legendArray","propertyStyleLookup","uniqueVal","uniqueSym","checkProperties","checkProperty","_b","_c","h","timeToLocalDateString","tm","Date","p1","toLocaleTimeString","p2","toLocaleDateString","range_change_1","MediaControl","changeFunc","mediaConfig","min","max","val","step","playInterval","showAsDate","_container","_playInterval","_changeFunc","_showAsDate","_currentValue","_min","_max","_step","_playing","btnPlay","_$btnStop","btnAhead","btnBack","_$slider","_$valLabelMin","_$valLabelVal","_$valLabelMax","setMinMaxValueStep","rangeChange","currentValue","___this","prop","_interval","setInterval","clearInterval","stopPlaying","newValue","newMin","newMax","newStep","newFunc","triggerCallback","callback","parseFloat","percent","lastVal","$slider","changeTimeout","mouseenter","mouseIn","mouseleave","mouseDown","mousedown","mouseup","mousemove","dragged","timeout","keyup","keyCode","change","LayerBaseVector","trim","_style","_autoLoad","_onDemand","onDemand","_onDemandDelay","mapMoveObj","_mapMove","_mapMoveMakeGetParams","_mapMoveParams","renderOrder","_projectionMap","_projection4326","addFeatures","featureCollection","evtType","extent","extend","setStyle","mapProj","getFeatures","LayerBaseVector_1","LayerBaseVectorEsri","where","outFields","outSR","_outSR","_urlCopy","autoLoad","_useEsriStyle","useEsriStyle","newStyleAndLegend","feats","readFeatures","LayerBaseXyzTile_1","RealEarthAnimateTile_1","LayerRealEarthTile","_products","products","animator","timeLoadCallback","timeInit","setLayerTime","theTime","LayerBaseXyzTile","XYZ","offsetMinutes","getTimezoneOffset","RealEarthAnimate","_rawDateStrings","_localDates","localTimes","_animateEnabled","_currentTime","_currentIndex","_loadDates","_loadLatest","inString","yr","month","hr","mn","sec","rawDateStr","dteStr","newDte","setMinutes","getMinutes","getTime","newIndex","RealEarthAnimate_1","RealEarthAnimateTile","_sourceUrls","rawDte","dteProductUrl","setUrl","getZIndex","quickMap_1","LayerRealEarthTile_1","media_control_1","LayerBaseVectorEsri_1","LayerEsriMapServer_1","nexrhresStatic","endTime","setHours","getHours","startTime","rangeStep","round","v","coordinationLayer","oakRidgeLayers","oakRidgeLayer"],"mappings":"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","file":"animate.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = ol;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util');\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        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n        return v.toString(16);\r\n    });\r\n}\r\nnm.makeGuid = makeGuid;\r\nexports.default = makeGuid;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapPopupCls_1 = __webpack_require__(12);\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexports.mapPopup = new mapPopupCls_1.default();\r\nexports.default = exports.mapPopup;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * base interaction\r\n */\r\nvar MapInteractionBase = (function () {\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    function MapInteractionBase(subtype) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\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    MapInteractionBase.prototype.init = function (theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    };\r\n    Object.defineProperty(MapInteractionBase.prototype, \"map\", {\r\n        /**\r\n         * get reference to the ol map object\r\n         * @returns {ol.Map} the map object\r\n         */\r\n        get: function () {\r\n            return this._map;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MapInteractionBase.prototype, \"initialized\", {\r\n        /**\r\n         * get if is initialized\r\n         * @returns {boolean} is initialized\r\n         */\r\n        get: function () {\r\n            return this._initialized;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    MapInteractionBase.prototype._checkInit = function () {\r\n        if (!this.initialized) {\r\n            var 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     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    MapInteractionBase.prototype.checkInit = function () {\r\n        this._checkInit();\r\n    };\r\n    return MapInteractionBase;\r\n}());\r\nexports.MapInteractionBase = MapInteractionBase;\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexports.default = MapInteractionBase;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapMoveCls_1 = __webpack_require__(11);\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\nexports.mapMove = new mapMoveCls_1.default();\r\nexports.default = exports.mapMove;\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar quickMapBase_1 = __webpack_require__(13);\r\nvar provide_1 = __webpack_require__(0);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMap(options) {\r\n    var m = quickMapBase_1.quickMapBase(options);\r\n    mapMove_1.default.init(m);\r\n    mapPopup_1.default.init(m);\r\n    return m;\r\n}\r\nexports.quickMap = quickMap;\r\nnm.quickMap = quickMap;\r\nexports.default = quickMap;\r\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar zoomResolutionConvert = __webpack_require__(14);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nvar LayerBase = (function () {\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    function LayerBase(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        options = options || {};\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\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        this.id = options.id || makeGuid_1.default();\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        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        }\r\n        else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        this._source = undefined;\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\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        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        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n        this._legendContent = '';\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        }\r\n        else {\r\n            this._legendContent += \"<label class=\\\"legend-layer-name\\\">\" + this.name + \"</label>\";\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     * 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    LayerBase.prototype._load = function () {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        }\r\n        else {\r\n            this._loaded = true;\r\n            return false;\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    LayerBase.prototype.getLegendDiv = function () {\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     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    LayerBase.prototype._addLegendContent = function (additionalContent) {\r\n        if (additionalContent === void 0) { additionalContent = ''; }\r\n        var addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n        this._legendContent += additionalContent;\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\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     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    LayerBase.prototype.addLegendContent = function (additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    };\r\n    LayerBase.prototype.applyCollapse = function () {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n            return undefined;\r\n        }\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\r\n        if (this._$legendDiv.length > 0) {\r\n            var $expander = this._$legendDiv.find('.legend-items-expander');\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n                $expander.click(function () {\r\n                    var $this = $(this);\r\n                    $this.siblings('ul').slideToggle();\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    }\r\n                    else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\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     * trick to refresh the layer\r\n     */\r\n    LayerBase.prototype.refresh = function () {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"id\", {\r\n        get: function () {\r\n            return this._id;\r\n        },\r\n        set: function (newId) {\r\n            this._id = newId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"animate\", {\r\n        get: function () {\r\n            return this._animate;\r\n        },\r\n        set: function (animate) {\r\n            this._animate = animate;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"legendContent\", {\r\n        /**\r\n         * get the legend content\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._legendContent;\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: function (newVal) {\r\n            this._legendContent = newVal;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"params\", {\r\n        /**\r\n         * get the map get params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._params;\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: function (newParams) {\r\n            this._params = newParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minResolution\", {\r\n        /**\r\n         * get the minimum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxResolution\", {\r\n        /**\r\n         * get the maximum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minZoom\", {\r\n        /**\r\n         * get min zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxZoom\", {\r\n        /**\r\n         * get max zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"url\", {\r\n        /**\r\n         * get the url\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._url;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"visible\", {\r\n        /**\r\n         * Get the layer visibility\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * set the visibility\r\n         * @param visibility\r\n         */\r\n        set: function (visibility) {\r\n            this.setVisible(visibility);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setVisible = function (visibility) {\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    Object.defineProperty(LayerBase.prototype, \"opacity\", {\r\n        /**\r\n         * Get the layer opacity\r\n         * @type {number}\r\n         */\r\n        get: function () {\r\n            return this._opacity;\r\n        },\r\n        /**\r\n         * Set the layer opacity\r\n         * @param {number} opacity - layer opacity\r\n         */\r\n        set: function (opacity) {\r\n            this._opacity = opacity;\r\n            if (this.olLayer) {\r\n                this.olLayer.setOpacity(this._opacity);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"name\", {\r\n        /**\r\n         * Get the layer name\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._name;\r\n        },\r\n        /**\r\n         * set the layer name\r\n         * @param {string} newName - the new name\r\n         */\r\n        set: function (newName) {\r\n            this._name = newName;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"loaded\", {\r\n        /**\r\n         * Check if the layer is loaded\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._loaded;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"source\", {\r\n        /**\r\n         * get the layer source\r\n         * @type {*}\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getSource = function () {\r\n        return this._source;\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"zIndex\", {\r\n        /**\r\n         * get the z index\r\n         */\r\n        get: function () {\r\n            return this._zIndex;\r\n        },\r\n        /**\r\n         * set the z index\r\n         */\r\n        set: function (newZ) {\r\n            this._zIndex = newZ;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setZIndex = function (newZ) {\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"olLayer\", {\r\n        /**\r\n         * the the ol layer\r\n         */\r\n        get: function () {\r\n            return this.getOlLayer();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getOlLayer = function () {\r\n        return this._olLayer;\r\n    };\r\n    return LayerBase;\r\n}());\r\nexports.LayerBase = LayerBase;\r\nnm.LayerBase = LayerBase;\r\nexports.default = LayerBase;\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util.checkDefined');\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\nfunction undefinedOrNull(input) {\r\n    \"use strict\";\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\nexports.undefinedOrNull = undefinedOrNull;\r\nnm.undefinedOrNull = undefinedOrNull;\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\nfunction definedAndNotNull(input) {\r\n    \"use strict\";\r\n    return !(undefinedOrNull(input));\r\n}\r\nexports.definedAndNotNull = definedAndNotNull;\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar esriToOl = __webpack_require__(16);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nvar LayerEsriMapServer = (function (_super) {\r\n    __extends(LayerEsriMapServer, _super);\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    function LayerEsriMapServer(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        _this._source = new ol.source.TileArcGISRest({\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        _this._olLayer = new ol.layer.Tile({\r\n            source: _this._source,\r\n            visible: _this.visible,\r\n            opacity: _this.opacity,\r\n            minResolution: _this._minResolution,\r\n            maxResolution: _this._maxResolution\r\n        });\r\n        _this._olLayer.setZIndex(_this._zIndex);\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n        _this._esriFormat = new ol.format.EsriJSON();\r\n        _this._popupRequest = null;\r\n        _this.addLegendContent();\r\n        if (options.addPopup) {\r\n            mapPopup_1.default.addMapServicePopup(_this);\r\n        }\r\n        return _this;\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    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {\r\n        var _this = this;\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n        $.get(urlCopy, {}, function (d) {\r\n            var newHtml = esriToOl.makeMapServiceLegend(d);\r\n            _super.prototype.addLegendContent.call(_this, newHtml);\r\n        }, 'json');\r\n    };\r\n    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'identify?callback=?';\r\n        var __this = this;\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {\r\n                var r = _a[_i];\r\n                var popupHtml = '<table class=\"esri-popup-table\">';\r\n                for (var a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        var attrVal = r['attributes'][a];\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n                        var attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n                        popupHtml += \"<tr><td>\" + attr + \"</td><td>\" + attrVal + \"</td></tr>\";\r\n                    }\r\n                }\r\n                popupHtml += '</table>';\r\n                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n    };\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"source\", {\r\n        /**\r\n         *\r\n         * @returns {ol.source.TileArcGISRest} the vector source\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getSource.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         * @returns the ol layer\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getOlLayer.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return LayerEsriMapServer;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerEsriMapServer = LayerEsriMapServer;\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexports.default = LayerEsriMapServer;\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar checkDefined = __webpack_require__(9);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nvar MapMoveCls = (function (_super) {\r\n    __extends(MapMoveCls, _super);\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    function MapMoveCls() {\r\n        var _this = _super.call(this, 'map move') || this;\r\n        _this._arrLyrRequest = [];\r\n        _this._arrLyrTimeout = [];\r\n        _this._arrLayer = [];\r\n        _this._lookupLayer = {};\r\n        _this._mapMoveCallbacks = [];\r\n        _this._mapMoveCallbacksLookup = {};\r\n        _this._mapMoveCallbackDelays = [];\r\n        _this._mapMoveCallbackContext = [];\r\n        _this._mapMoveCallbackTimeout = [];\r\n        _this._mapExtent = undefined;\r\n        _this._zoomLevel = undefined;\r\n        return _this;\r\n    }\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    MapMoveCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n            _this._updateMapExtent();\r\n            // trigger the layer updates\r\n            for (var i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n            // trigger the map callbacks\r\n            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    };\r\n    MapMoveCls.prototype._updateMapExtent = function () {\r\n        var theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n        var extentArray = theView.calculateExtent(this.map.getSize());\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    Object.defineProperty(MapMoveCls.prototype, \"mapExtent\", {\r\n        /**\r\n         * return the map extent\r\n         */\r\n        get: function () {\r\n            if (!this._mapExtent) {\r\n                this._updateMapExtent();\r\n            }\r\n            return this._mapExtent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        }\r\n        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        }\r\n        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\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        // 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        // dummy callback used if before load returns false\r\n        var callbackFunc = function () { };\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n            var __this_1 = this;\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    var _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {\r\n                        /**\r\n                         * @type {LayerBaseVector}\r\n                         */\r\n                        theLayer.mapMoveCallback(d);\r\n                        theLayer.loadCallback();\r\n                    }, 'json').fail(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(function () {\r\n                        _innerThis._arrLyrTimeout[theIndex] = null;\r\n                        _innerThis._arrLyrRequest[theIndex] = null;\r\n                    });\r\n                }\r\n                innerFunction.call(__this_1, lyr, index);\r\n            };\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     * 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    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {\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        if (typeof ind !== 'number') {\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n        if (ind < 0) {\r\n            console.log('function not found');\r\n            return;\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        var ctx = this._mapMoveCallbackContext[ind];\r\n        var theFunc = this._mapMoveCallbacks[ind];\r\n        var __this = this;\r\n        var f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n            else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\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    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {\r\n        if (triggerOnAdd === void 0) { triggerOnAdd = true; }\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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     * 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    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {\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_1.default();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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    return MapMoveCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapMoveCls = MapMoveCls;\r\nnm.MapMoveCls = MapMoveCls;\r\nexports.default = MapMoveCls;\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\nvar FeatureLayerProperties = (function () {\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    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {\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    Object.defineProperty(FeatureLayerProperties.prototype, \"layerName\", {\r\n        get: function () {\r\n            if (typeof this.esriLayerName == 'string') {\r\n                return this.esriLayerName;\r\n            }\r\n            else {\r\n                return this.layer.name;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return FeatureLayerProperties;\r\n}());\r\nexports.FeatureLayerProperties = FeatureLayerProperties;\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nvar MapPopupCls = (function (_super) {\r\n    __extends(MapPopupCls, _super);\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     * map popup constructor\r\n     */\r\n    function MapPopupCls() {\r\n        var _this = _super.call(this, 'map popup') || this;\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        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        _this._popupChangedFunctions = [];\r\n        _this._esriMapServiceLayers = [];\r\n        _this._popupOpen = false;\r\n        _this._popupCoordinate = null;\r\n        _this._passThroughLayerFeatureArray = [];\r\n        _this._currentPopupIndex = -1;\r\n        _this._popupContentLength = 0;\r\n        return _this;\r\n    }\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    MapPopupCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        var $map;\r\n        var target = this.map.getTarget();\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n        $map.append('<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        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        var _ease = function (n) {\r\n            return ol.easing.inAndOut(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        this._map.addOverlay(this._popupOverlay);\r\n        this._$popupCloser.click(function (evt) {\r\n            _this.closePopup();\r\n        });\r\n        // display popup on click\r\n        this._map.on('singleclick', function (evt) {\r\n            _this.closePopup();\r\n            _this._popupCoordinate = evt['coordinate'];\r\n            // esri map service layers\r\n            if (_this._esriMapServiceLayers.length > 0) {\r\n                var 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()).join(','),\r\n                    imageDisplay: _this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {\r\n                    var l = _a[_i];\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);\r\n            _this._passThroughLayerFeatureArray = [];\r\n            _this._currentPopupIndex = -1;\r\n            for (var i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                var featObj = layerFeatureObjectArray[i];\r\n                var props = featObj.feature.getProperties();\r\n                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                }\r\n                else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    _this._passThroughLayerFeatureArray.push(featObj);\r\n                }\r\n                else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;\r\n            _this._currentPopupIndex = -1;\r\n            var 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            popupHtml += '</div>';\r\n            _this._$popupContent.html(popupHtml);\r\n            _this._$popupContent.find('.previous-popup').click(function () {\r\n                if (_this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == 0) {\r\n                    _this._currentPopupIndex = _this._popupContentLength - 1;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex--;\r\n                }\r\n                _this._triggerFeatSelect();\r\n            });\r\n            var nextPopup = _this._$popupContent.find('.next-popup');\r\n            nextPopup.click(function () {\r\n                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == _this._popupContentLength - 1) {\r\n                    _this._currentPopupIndex = 0;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex++;\r\n                }\r\n                _this._triggerFeatSelect();\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        //change mouse cursor when over marker\r\n        this._map.on('pointermove', function (evt) {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            var pixel = _this.map.getEventPixel(evt['originalEvent']);\r\n            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {\r\n                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {\r\n                    var olLayer = _a[_i];\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            });\r\n            var mapElement = _this.map.getTargetElement();\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n        return true;\r\n    };\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._triggerFeatSelect = function () {\r\n        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        var $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        var 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 (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\r\n            f(this._$popupContent);\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    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {\r\n        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);\r\n        featLayerObject.popupContent = popupContent;\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').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     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._featuresAtPixel = function (pixel) {\r\n        var _this = this;\r\n        var layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {\r\n            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n        return layerFeatureObjectArray;\r\n    };\r\n    MapPopupCls.prototype.closePopup = function () {\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        return false;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\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    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {\r\n        this._checkInit();\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        var theStyle;\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        }\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        var selectionLayer = new ol.layer.Vector({\r\n            source: new ol.source.Vector(),\r\n            style: theStyle\r\n        });\r\n        selectionLayer.setZIndex(100);\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n        return selectionLayer;\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    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {\r\n        var 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        return selectionLayer;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    MapPopupCls.prototype.removeVectorPopup = function (lyr) {\r\n        var idx = this._arrPopupLayerIds.indexOf(lyr.id);\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     * @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    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {\r\n        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n        return selectionLayer;\r\n    };\r\n    MapPopupCls.prototype.clearSelection = function () {\r\n        this._checkInit();\r\n        for (var i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\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    MapPopupCls.prototype.addMapClickFunction = function (func) {\r\n        this._mapClickFunctions.push(func);\r\n    };\r\n    return MapPopupCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapPopupCls = MapPopupCls;\r\nnm.MapPopupCls = MapPopupCls;\r\nexports.default = MapPopupCls;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMapBase(options) {\r\n    options = options || {};\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    var $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n    var 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    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')\";\r\n    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==')\";\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    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        var p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        p.transform(new ol.proj.Projection({ code: \"EPSG:4326\" }), new ol.proj.Projection({ code: \"EPSG:3857\" }));\r\n        var coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n    var controls = ol.control.defaults({\r\n        attributionOptions: { collapsible: false }\r\n    });\r\n    var 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    var 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    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n    return map;\r\n}\r\nexports.quickMapBase = quickMapBase;\r\nnm.quickMapBase = quickMapBase;\r\nexports.default = quickMapBase;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers.zoomResolutionConvert');\r\nvar _zoomResLookup = [\r\n    156543.03392804097,\r\n    78271.51696402048,\r\n    39135.75848201024,\r\n    19567.87924100512,\r\n    9783.93962050256,\r\n    4891.96981025128,\r\n    2445.98490512564,\r\n    1222.99245256282,\r\n    611.49622628141,\r\n    305.748113140705,\r\n    152.8740565703525,\r\n    76.43702828517625,\r\n    38.21851414258813,\r\n    19.109257071294063,\r\n    9.554628535647032,\r\n    4.777314267823516,\r\n    2.388657133911758,\r\n    1.194328566955879,\r\n    0.5971642834779395,\r\n    0.29858214173896974,\r\n    0.14929107086948487,\r\n    0.07464553543474244,\r\n    0.03732276771737122,\r\n    0.01866138385868561,\r\n    0.009330691929342804,\r\n    0.004665345964671402,\r\n    0.002332672982335701,\r\n    0.0011663364911678506,\r\n    0.0005831682455839253 //28\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\nfunction zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        }\r\n        else {\r\n            console.log(\"invalid zoom level provided: \" + zoomLevel);\r\n            return undefined;\r\n        }\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\nexports.zoomToResolution = zoomToResolution;\r\nnm.zoomToResolution = zoomToResolution;\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\nfunction resolutionToZoom(resolution) {\r\n    for (var i = 0; i < _zoomResLookup.length; i++) {\r\n        if (resolution >= _zoomResLookup[i]) {\r\n            return i;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.resolutionToZoom = resolutionToZoom;\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = jquery-ui;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar nm = provide_1.default('olHelpers.esriToOlStyle');\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 * @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    return \"rgba(\" + colorArray[0] + \",\" + colorArray[1] + \",\" + colorArray[2] + \",\" + opacity + \")\";\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\nnm.htmlEscape = htmlEscape;\r\nvar CommonSymbol = (function () {\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    function CommonSymbol(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n    return CommonSymbol;\r\n}());\r\nvar PointSymbol = (function (_super) {\r\n    __extends(PointSymbol, _super);\r\n    function PointSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\r\n                var radius = _this.symbolObj.size;\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        return _this;\r\n    }\r\n    return PointSymbol;\r\n}(CommonSymbol));\r\nvar LineSymbol = (function (_super) {\r\n    __extends(LineSymbol, _super);\r\n    function LineSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var lineWidth = _this.symbolObj.width;\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                _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        return _this;\r\n    }\r\n    return LineSymbol;\r\n}(CommonSymbol));\r\nvar PolygonSymbol = (function (_super) {\r\n    __extends(PolygonSymbol, _super);\r\n    function PolygonSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\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                _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            default:\r\n                console.log(_this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);\r\n        }\r\n        return _this;\r\n    }\r\n    return PolygonSymbol;\r\n}(CommonSymbol));\r\nvar SymbolGenerator = (function () {\r\n    function SymbolGenerator(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    return SymbolGenerator;\r\n}());\r\nvar SingleSymbol = (function (_super) {\r\n    __extends(SingleSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    function SingleSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.symbol = _this.renderer.symbol;\r\n        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);\r\n        _this.olStyle = symbolObj.olStyle;\r\n        _this.legendHtml = symbolObj.legendHtml;\r\n        return _this;\r\n    }\r\n    return SingleSymbol;\r\n}(SymbolGenerator));\r\nvar UniqueValueSymbol = (function (_super) {\r\n    __extends(UniqueValueSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    function UniqueValueSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];\r\n        _this.propertyName = _this.renderer['field1'];\r\n        _this.defaultSymbol = _this.renderer['defaultSymbol'];\r\n        if (_this.defaultSymbol) {\r\n            var 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        }\r\n        else {\r\n            _this.defaultStyle = undefined;\r\n            _this.defaultLabelHtml = 'other';\r\n        }\r\n        _this.valueArray = [];\r\n        _this.labelArray = [];\r\n        _this.legendArray = [];\r\n        _this.propertyStyleLookup = {};\r\n        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {\r\n            var uniqueVal = _a[_i];\r\n            _this.labelArray.push(uniqueVal['label']);\r\n            _this.valueArray.push(uniqueVal['value']);\r\n            var 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        _this.olStyle = function (feature) {\r\n            var checkProperties = feature.getProperties();\r\n            var checkProperty = checkProperties[_this.propertyName];\r\n            var returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            }\r\n            else {\r\n                returnValue = [_this.defaultStyle];\r\n            }\r\n            return returnValue;\r\n        };\r\n        if (_this.defaultLabelHtml !== null) {\r\n            _this.legendArray.push(_this.defaultLabelHtml);\r\n        }\r\n        _this.legendHtml = '<ul>';\r\n        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {\r\n            var h = _c[_b];\r\n            _this.legendHtml += \"<li>\" + h + \"</li>\";\r\n        }\r\n        _this.legendHtml += '</ul>';\r\n        return _this;\r\n    }\r\n    return UniqueValueSymbol;\r\n}(SymbolGenerator));\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 * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nfunction makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    var renderer = esriResponse.drawingInfo.renderer;\r\n    var symbolLegendOut = null;\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    if (symbolLegendOut == null) {\r\n        return { style: undefined, legend: '' };\r\n    }\r\n    else {\r\n        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };\r\n    }\r\n}\r\nexports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\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) {\r\n    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    var layerName = lyrObject['layerName'];\r\n    var legendItems = lyrObject['legend'];\r\n    var legendHtml = '';\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\";\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    }\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 (var 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    if (!skipLayerNameAndExpander) {\r\n        legendHtml = \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\" + legendHtml;\r\n    }\r\n    return legendHtml;\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\nfunction makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n    var newLegendHtml = '';\r\n    var layers = esriResponse['layers'];\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    }\r\n    else {\r\n        newLegendHtml += '<ul>';\r\n        for (var i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n    return newLegendHtml;\r\n}\r\nexports.makeMapServiceLegend = makeMapServiceLegend;\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n/***/ }),\n/* 17 */,\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar range_change_1 = __webpack_require__(19);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('domUtil');\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\nfunction timeToLocalDateString(tm) {\r\n    \"use strict\";\r\n    var d = new Date(tm);\r\n    var p1 = d.toLocaleTimeString().split(' ');\r\n    var p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\nvar MediaControl = (function () {\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    function MediaControl(element, changeFunc, mediaConfig) {\r\n        if (changeFunc === void 0) { changeFunc = function () { return; }; }\r\n        if (mediaConfig === void 0) { mediaConfig = {}; }\r\n        var _this = this;\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        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        }\r\n        else {\r\n            this._container = element;\r\n        }\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n        this._showAsDate = mediaConfig.showAsDate;\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        var htmlStr = '<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        this._container.append(htmlStr);\r\n        // let btnPause = this._container.find('.media-pause');\r\n        var btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        var btnAhead = this._container.find('.media-ahead');\r\n        var btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\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        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);\r\n        var ___this = this;\r\n        btnPlay.click(function () {\r\n            var $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            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            var $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        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n    MediaControl.prototype.stopPlaying = function () {\r\n        if (this._playing) {\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    };\r\n    Object.defineProperty(MediaControl.prototype, \"playing\", {\r\n        get: function () {\r\n            return this._playing;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"min\", {\r\n        get: function () {\r\n            return this._min;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"max\", {\r\n        get: function () {\r\n            return this._max;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"step\", {\r\n        get: function () {\r\n            return this._step;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"currentValue\", {\r\n        get: function () {\r\n            return this._currentValue;\r\n        },\r\n        set: function (newValue) {\r\n            if (newValue > this._max) {\r\n                newValue = this._min;\r\n            }\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            if (this._showAsDate) {\r\n                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            }\r\n            else {\r\n                this._$valLabelVal.html(this.currentValue.toString());\r\n            }\r\n            this._changeFunc(newValue);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\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        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        }\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    Object.defineProperty(MediaControl.prototype, \"changeFunction\", {\r\n        /**\r\n         *\r\n         * @param {mediaCallback} newFunc the callback on change\r\n         */\r\n        set: function (newFunc) {\r\n            this._changeFunc = newFunc;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return MediaControl;\r\n}());\r\nexports.MediaControl = MediaControl;\r\nnm.MediaControl = MediaControl;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('domUtil');\r\nvar mouseIn = false;\r\nvar mouseDown = false;\r\nvar timeout = null;\r\nvar dragged = false;\r\nvar lastVal;\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\nfunction triggerCallback(callback, evt) {\r\n    \"use strict\";\r\n    var val = parseFloat(this.value);\r\n    var min = parseFloat(this.min);\r\n    var max = parseFloat(this.max);\r\n    var step = parseFloat(this.step);\r\n    if (max - val < step) {\r\n        val = max;\r\n    }\r\n    var percent = (val - min) / (max - min);\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 * 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\nfunction rangeChange($slider, callback, changeTimeout) {\r\n    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\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        dragged = true;\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n        var _this = this;\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n        }, changeTimeout);\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    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n    return this;\r\n}\r\nexports.rangeChange = rangeChange;\r\nnm.rangeChange = rangeChange;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nvar LayerBaseVector = (function (_super) {\r\n    __extends(LayerBaseVector, _super);\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    function LayerBaseVector(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        options = options;\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        _this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n        if (_this.visible) {\r\n            _this._autoLoad = true;\r\n        }\r\n        else {\r\n            _this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\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        if (options.mapMoveObj) {\r\n            _this._mapMove = options.mapMoveObj;\r\n        }\r\n        else {\r\n            _this._mapMove = _this._onDemand ? mapMove_1.default : undefined;\r\n        }\r\n        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () { return {}; };\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        _this._source = new ol.source.Vector();\r\n        _this._olLayer = new ol.layer.Vector({\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        _this.olLayer.setZIndex(_this._zIndex);\r\n        _this._projectionMap = null;\r\n        _this._projection4326 = new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        return _this;\r\n    }\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    LayerBaseVector.prototype.addFeatures = function (featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\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    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\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        return this.visible;\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    LayerBaseVector.prototype.mapMoveMakeGetParams = function (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     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    LayerBaseVector.prototype.mapMoveCallback = function (d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    };\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    LayerBaseVector.prototype.clear = function () {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBaseVector.prototype, \"onDemandDelay\", {\r\n        /**\r\n         * get on demand delay in miliseconds\r\n         */\r\n        get: function () {\r\n            return this._onDemandDelay;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"autoLoad\", {\r\n        /**\r\n         * get if the layer is autoloaded\r\n         */\r\n        get: function () {\r\n            return this._autoLoad;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"style\", {\r\n        /**\r\n         * get the style definition\r\n         */\r\n        get: function () {\r\n            return this._style;\r\n        },\r\n        /**\r\n         * set the style\r\n         * @param style - the style or function\r\n         */\r\n        set: function (style) {\r\n            this._style = style;\r\n            this.olLayer.setStyle(this._style);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapCrs\", {\r\n        /**\r\n         * get the map CRS if it is defined by the map move object\r\n         */\r\n        get: function () {\r\n            return this.mapProj == null ? null : this.mapProj.getCode();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapProj\", {\r\n        get: function () {\r\n            if (this._projectionMap != null) {\r\n                return this._projectionMap;\r\n            }\r\n            if (this._mapMove) {\r\n                this._projectionMap = this._mapMove.map.getView().getProjection();\r\n                return this._projectionMap;\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapMove\", {\r\n        /**\r\n         * get the map move object\r\n         * @type {MapMoveCls|*}\r\n         */\r\n        get: function () {\r\n            return this._mapMove;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapMoveParams\", {\r\n        /**\r\n         * map move params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._mapMoveParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"visible\", {\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * Set the layer visibility\r\n         * @type {boolean}\r\n         * @override\r\n         */\r\n        set: function (visibility) {\r\n            _super.prototype.setVisible.call(this, visibility);\r\n            if (this._onDemand) {\r\n                this.mapMove.triggerLyrLoad(this);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"source\", {\r\n        /**\r\n         * get the layer vector source\r\n         * @override\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"features\", {\r\n        /**\r\n         * array of ol features\r\n         */\r\n        get: function () {\r\n            return this.source.getFeatures();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getOlLayer.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBaseVector.prototype.setZIndex = function (newZ) {\r\n        this.olLayer.setZIndex(newZ);\r\n    };\r\n    return LayerBaseVector;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerBaseVector = LayerBaseVector;\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexports.default = LayerBaseVector;\r\n\n\n/***/ }),\n/* 21 */,\n/* 22 */,\n/* 23 */,\n/* 24 */,\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBaseVector_1 = __webpack_require__(20);\r\nvar esriToOl = __webpack_require__(16);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nvar LayerBaseVectorEsri = (function (_super) {\r\n    __extends(LayerBaseVectorEsri, _super);\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    function LayerBaseVectorEsri(url, options) {\r\n        var _this = this;\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        _this = _super.call(this, url, options) || this;\r\n        _this._outSR = _this.params['outSR'];\r\n        _this._esriFormat = new ol.format.EsriJSON();\r\n        if (_this._url[_this._url.length - 1] !== '/') {\r\n            _this._url += '/';\r\n        }\r\n        _this._urlCopy = _this.url;\r\n        _this._url += 'query?callback=?';\r\n        if (_this.autoLoad || _this.visible) {\r\n            _this._load();\r\n        }\r\n        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n        if (_this._useEsriStyle) {\r\n            _this.addLegendContent();\r\n        }\r\n        return _this;\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    LayerBaseVectorEsri.prototype.addLegendContent = function (additionalContent) {\r\n        var _this = this;\r\n        if (!this._useEsriStyle) {\r\n            _super.prototype.addLegendContent.call(this, additionalContent);\r\n        }\r\n        else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, function (d) {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n                    return;\r\n                }\r\n                var newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                _this.style = newStyleAndLegend.style;\r\n                _super.prototype.addLegendContent.call(_this, newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    };\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    LayerBaseVectorEsri.prototype.addFeatures = function (featureCollection) {\r\n        var feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    };\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    LayerBaseVectorEsri.prototype._load = function () {\r\n        var _this = this;\r\n        if (_super.prototype._load.call(this)) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, function (d) {\r\n            _this.addFeatures(d);\r\n            _this.loadCallback(_this);\r\n        }, 'json').fail(function () {\r\n            _this._loaded = false;\r\n        });\r\n        return false;\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    LayerBaseVectorEsri.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {\r\n        _super.prototype.mapMoveMakeGetParams.call(this, 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     * 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    LayerBaseVectorEsri.prototype.mapMoveBefore = function (zoom, evtType) {\r\n        return _super.prototype.mapMoveBefore.call(this, 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     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    LayerBaseVectorEsri.prototype.mapMoveCallback = function (d) {\r\n        _super.prototype.mapMoveCallback.call(this, d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    };\r\n    return LayerBaseVectorEsri;\r\n}(LayerBaseVector_1.LayerBaseVector));\r\nexports.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexports.default = LayerBaseVectorEsri;\r\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBaseXyzTile_1 = __webpack_require__(29);\r\nvar RealEarthAnimateTile_1 = __webpack_require__(32);\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * Real earth tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nvar LayerRealEarthTile = (function (_super) {\r\n    __extends(LayerRealEarthTile, _super);\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    function LayerRealEarthTile(options) {\r\n        var _this = this;\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            _this = _super.call(this, '', options) || this;\r\n            _this._products = options.products;\r\n            _this.animator = new RealEarthAnimateTile_1.default(_this, options.timeLoadCallback);\r\n            _this.animator.timeInit();\r\n        }\r\n        else {\r\n            _this = _super.call(this, \"http://realearth.ssec.wisc.edu/api/image?products=\" + options.products + \"&x={x}&y={y}&z={z}\", options) || this;\r\n            _this._products = options.products;\r\n        }\r\n        return _this;\r\n    }\r\n    LayerRealEarthTile.prototype.setLayerTime = function (theTime) {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    LayerRealEarthTile.prototype._load = function () {\r\n        if (this.animator) {\r\n            return false;\r\n        }\r\n        return _super.prototype._load.call(this);\r\n    };\r\n    return LayerRealEarthTile;\r\n}(LayerBaseXyzTile_1.LayerBaseXyzTile));\r\nexports.LayerRealEarthTile = LayerRealEarthTile;\r\nnm.LayerRealEarthTile = LayerRealEarthTile;\r\nexports.default = LayerRealEarthTile;\r\n\n\n/***/ }),\n/* 27 */,\n/* 28 */,\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * XYZ tile\r\n * @augments LayerBase\r\n */\r\nvar LayerBaseXyzTile = (function (_super) {\r\n    __extends(LayerBaseXyzTile, _super);\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    function LayerBaseXyzTile(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        _this._source = new ol.source.XYZ({ url: _this.url == '' ? undefined : _this.url });\r\n        _this._olLayer = new ol.layer.Tile({\r\n            source: _this._source,\r\n            visible: _this.visible,\r\n            opacity: _this.opacity,\r\n            minResolution: _this._minResolution,\r\n            maxResolution: _this._maxResolution\r\n        });\r\n        _this._olLayer.setZIndex(_this._zIndex);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LayerBaseXyzTile.prototype, \"source\", {\r\n        /**\r\n         *\r\n         * @returns {ol.source.XYZ} the vector source\r\n         */\r\n        get: function () {\r\n            return this._source;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseXyzTile.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer\r\n         */\r\n        get: function () {\r\n            return this._olLayer;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return LayerBaseXyzTile;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerBaseXyzTile = LayerBaseXyzTile;\r\nnm.LayerBaseXyzTile = LayerBaseXyzTile;\r\nexports.default = LayerBaseXyzTile;\r\n\n\n/***/ }),\n/* 30 */,\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('mixin');\r\n/**\r\n * The GMT offset time in minutes\r\n * @type {number}\r\n */\r\nvar offsetMinutes = (new Date()).getTimezoneOffset();\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\nvar RealEarthAnimate = (function () {\r\n    function RealEarthAnimate(lyr, loadCallback) {\r\n        this.lyr = lyr;\r\n        this._products = lyr._products;\r\n        if (loadCallback) {\r\n            this.loadCallback = loadCallback;\r\n        }\r\n        else {\r\n            this.loadCallback = function () { return; };\r\n        }\r\n    }\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    RealEarthAnimate.prototype.timeInit = function () {\r\n        var _this = this;\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        $.get('http://realearth.ssec.wisc.edu/api/products', { products: this._products }, function (d) {\r\n            if (d.length == 0) {\r\n                console.log(_this._products + \" layer not available or does not have times\");\r\n                return;\r\n            }\r\n            d = d[0];\r\n            for (var 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     * 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    RealEarthAnimate.prototype._loadDates = function (inString) {\r\n        var yr = inString.slice(0, 4);\r\n        var month = inString.slice(4, 6);\r\n        var d = inString.slice(6, 8);\r\n        var hr = inString.slice(9, 11);\r\n        var mn = inString.slice(11, 13);\r\n        var sec = inString.slice(13, 15);\r\n        var rawDateStr = inString.replace('.', '_');\r\n        this._rawDateStrings.push(rawDateStr);\r\n        var dteStr = month + \"/\" + d + \"/\" + yr + \" \" + hr + \":\" + mn + \":\" + sec;\r\n        var 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        return rawDateStr;\r\n    };\r\n    /**\r\n     *\r\n     * @protected\r\n     * @returns {boolean} if should continue\r\n     */\r\n    RealEarthAnimate.prototype._loadLatest = function () {\r\n        mapPopup_1.default.closePopup();\r\n        if (this.localTimes.length > 0) {\r\n            this._currentIndex = this.localTimes.length - 1;\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\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    RealEarthAnimate.prototype.setLayerTime = function (theTime) {\r\n        this._currentTime = theTime;\r\n        var newIndex;\r\n        if (theTime < this.localTimes[0]) {\r\n            return false;\r\n        }\r\n        else if (theTime > this.localTimes[this.localTimes.length - 1]) {\r\n            newIndex = this.localTimes.length - 1;\r\n        }\r\n        for (var 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        if (newIndex == this._currentIndex) {\r\n            return false;\r\n        }\r\n        else {\r\n            this._currentIndex = newIndex;\r\n            mapPopup_1.default.closePopup();\r\n            return true;\r\n        }\r\n    };\r\n    return RealEarthAnimate;\r\n}());\r\nexports.RealEarthAnimate = RealEarthAnimate;\r\nnm.RealEarthAnimate = RealEarthAnimate;\r\nexports.default = RealEarthAnimate;\r\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nvar RealEarthAnimate_1 = __webpack_require__(31);\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('mixin');\r\n/**\r\n * Animate real earth tile\r\n * @augments RealEarthAnimate\r\n */\r\nvar RealEarthAnimateTile = (function (_super) {\r\n    __extends(RealEarthAnimateTile, _super);\r\n    function RealEarthAnimateTile(layer, loadCallback) {\r\n        var _this = _super.call(this, layer, loadCallback) || this;\r\n        _this._source = layer.source;\r\n        _this._olLayer = layer.olLayer;\r\n        return _this;\r\n    }\r\n    RealEarthAnimateTile.prototype.timeInit = function () {\r\n        _super.prototype.timeInit.call(this);\r\n        this._sourceUrls = [];\r\n    };\r\n    RealEarthAnimateTile.prototype._loadDates = function (inString) {\r\n        var rawDte = _super.prototype._loadDates.call(this, inString);\r\n        var dteProductUrl = \"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     * @protected\r\n     */\r\n    RealEarthAnimateTile.prototype._loadLatest = function () {\r\n        if (_super.prototype._loadLatest.call(this)) {\r\n            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);\r\n        }\r\n        return true;\r\n    };\r\n    RealEarthAnimateTile.prototype.setLayerTime = function (theTime) {\r\n        if (_super.prototype.setLayerTime.call(this, 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        }\r\n        else {\r\n            this._olLayer.setZIndex(-1);\r\n        }\r\n        return true;\r\n    };\r\n    return RealEarthAnimateTile;\r\n}(RealEarthAnimate_1.default));\r\nnm.RealEarthAnimateTile = RealEarthAnimateTile;\r\nexports.default = RealEarthAnimateTile;\r\n\n\n/***/ }),\n/* 33 */,\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar quickMap_1 = __webpack_require__(7);\r\nvar LayerRealEarthTile_1 = __webpack_require__(26);\r\nvar media_control_1 = __webpack_require__(18);\r\nvar $ = __webpack_require__(1);\r\nvar LayerBaseVectorEsri_1 = __webpack_require__(25);\r\nvar LayerEsriMapServer_1 = __webpack_require__(10);\r\n__webpack_require__(15);\r\nvar nexrhresStatic = new LayerRealEarthTile_1.default({\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\nvar d = new Date();\r\nvar endTime = d.getTime();\r\nd.setHours(d.getHours() - 4);\r\nvar startTime = d.getTime();\r\nvar rangeStep = Math.round((endTime - startTime) / 8);\r\nvar media = new media_control_1.MediaControl($('#control'), function (v) {\r\n    nexrhresStatic.setLayerTime(v);\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\nvar map = quickMap_1.quickMap();\r\nmap.addLayer(nexrhresStatic.olLayer);\r\nvar coordinationLayer = new LayerBaseVectorEsri_1.LayerBaseVectorEsri('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0', {\r\n    visible: true,\r\n    autoLoad: true,\r\n    name: 'Coordination',\r\n    useEsriStyle: true\r\n});\r\nmap.addLayer(coordinationLayer.olLayer);\r\nvar 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\nfor (var i = 0; i < oakRidgeLayers.length; i++) {\r\n    var oakRidgeLayer = new LayerEsriMapServer_1.LayerEsriMapServer(\"http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/\" + oakRidgeLayers[i][1] + \"/MapServer\", {\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    map.addLayer(oakRidgeLayer.olLayer);\r\n}\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// animate.js"," \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 95f473b09da6d84b9b8b","/**\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\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 = options || {} as quickMapOptions;\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","module.exports = jquery-ui;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jquery-ui\"\n// module id = 15\n// module chunks = 0 4 5","/**\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 '../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport 'jquery-ui';\r\n\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// ../../src/_test/animate.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/another.js b/test-html/js/another.js
index dcd33182b698e0e29382ade353e4fe46282f3608..a76c223514bb799251b1ec79b3aedb9617655f82 100644
--- a/test-html/js/another.js
+++ b/test-html/js/another.js
@@ -1,59 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!*******************************!*\
-  !*** ./dist/_test/another.js ***!
-  \*******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 9/22/2016.
-	 */
-	console.log('here is another');
-	console.log('here is another');
-
-
-/***/ }
-/******/ ]);
+!function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=e,n.c=r,n.i=function(e){return e},n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=35)}({35:function(e,n){console.log("here is another"),console.log("here is another")}});
 //# sourceMappingURL=another.js.map
\ No newline at end of file
diff --git a/test-html/js/another.js.map b/test-html/js/another.js.map
index 4a669765f1e57b1e732c6f5bc915010ff50420dc..497149515f5bc32dcd194a6d8cc4c516d7a642ab 100644
--- a/test-html/js/another.js.map
+++ b/test-html/js/another.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3","webpack:///./src/_test/another.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA;;IAEG;AAEH,QAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,QAAO,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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\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// ./src/_test/another.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///another.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d*******","webpack:///../../src/_test/another.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","35","console","log"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,MDMMC,GACA,SAAUxB,EAAQD,GEnExB0B,QAAQC,IAAI,mBACZD,QAAQC,IAAI","file":"another.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/***/ 35:\n/***/ (function(module, exports) {\n\n/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\nconsole.log('here is another');\r\nconsole.log('here is another');\r\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// another.js"," \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 95f473b09da6d84b9b8b","/**\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// ../../src/_test/another.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/compare-test.js b/test-html/js/compare-test.js
index a2d22f1ce86d494dc99c38f5e9818127b6186c13..5f6840f3232f23cd63a27850acb0788d4d491548 100644
--- a/test-html/js/compare-test.js
+++ b/test-html/js/compare-test.js
@@ -1,2307 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!************************************!*\
-  !*** ./dist/_test/compare-test.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 6/1/2016.
-	 */
-	var quickMap_1 = __webpack_require__(/*! ../olHelpers/quickMap */ 1);
-	var layerSwipe_1 = __webpack_require__(/*! ../olHelpers/layerSwipe */ 25);
-	var LayerEsriMapServer_1 = __webpack_require__(/*! ../layers/LayerEsriMapServer */ 24);
-	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);
-
-
-/***/ },
-/* 1 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/quickMap.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var quickMapBase_1 = __webpack_require__(/*! ./quickMapBase */ 2);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var mapMove_1 = __webpack_require__(/*! ./mapMove */ 6);
-	var mapPopup_1 = __webpack_require__(/*! ./mapPopup */ 11);
-	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) {
-	    var m = quickMapBase_1.quickMapBase(options);
-	    mapMove_1.default.init(m);
-	    mapPopup_1.default.init(m);
-	    return m;
-	}
-	exports.quickMap = quickMap;
-	nm.quickMap = quickMap;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMap;
-
-
-/***/ },
-/* 2 */
-/*!****************************************!*\
-  !*** ./dist/olHelpers/quickMapBase.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	    options = 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) {
-	    }
-	    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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMapBase;
-
-
-/***/ },
-/* 3 */
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-/* 4 */
-/*!*********************!*\
-  !*** external "ol" ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	module.exports = ol;
-
-/***/ },
-/* 5 */
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-/* 6 */
-/*!***********************************!*\
-  !*** ./dist/olHelpers/mapMove.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapMoveCls_1 = __webpack_require__(/*! ./mapMoveCls */ 7);
-	/**
-	 * The single map move object catch is that it is common to multimap pages
-	 * @type {MapMoveCls}
-	 */
-	exports.mapMove = new mapMoveCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapMove;
-
-
-/***/ },
-/* 7 */
-/*!**************************************!*\
-  !*** ./dist/olHelpers/mapMoveCls.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var checkDefined = __webpack_require__(/*! ../util/checkDefined */ 9);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapMoveCls;
-
-
-/***/ },
-/* 8 */
-/*!**********************************************!*\
-  !*** ./dist/olHelpers/mapInteractionBase.js ***!
-  \**********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 12/8/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapInteractionBase;
-
-
-/***/ },
-/* 9 */
-/*!***********************************!*\
-  !*** ./dist/util/checkDefined.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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 */
-/*!*******************************!*\
-  !*** ./dist/util/makeGuid.js ***!
-  \*******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = makeGuid;
-
-
-/***/ },
-/* 11 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/mapPopup.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapPopupCls_1 = __webpack_require__(/*! ./mapPopupCls */ 12);
-	/**
-	 * The single popup object catch is that it is common to multimap pages
-	 * @type {MapPopupCls}
-	 */
-	exports.mapPopup = new mapPopupCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapPopup;
-
-
-/***/ },
-/* 12 */
-/*!***************************************!*\
-  !*** ./dist/olHelpers/mapPopupCls.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	                }
-	                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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapPopupCls;
-
-
-/***/ },
-/* 13 */,
-/* 14 */,
-/* 15 */
-/*!**********************************!*\
-  !*** ./dist/layers/LayerBase.js ***!
-  \**********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var zoomResolutionConvert = __webpack_require__(/*! ../olHelpers/zoomResolutionConvert */ 16);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBase;
-
-
-/***/ },
-/* 16 */
-/*!*************************************************!*\
-  !*** ./dist/olHelpers/zoomResolutionConvert.js ***!
-  \*************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/14/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ },
-/* 17 */,
-/* 18 */,
-/* 19 */,
-/* 20 */,
-/* 21 */,
-/* 22 */,
-/* 23 */
-/*!*****************************************!*\
-  !*** ./dist/olHelpers/esriToOlStyle.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 1/4/2016.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	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;
-
-
-/***/ },
-/* 24 */
-/*!*******************************************!*\
-  !*** ./dist/layers/LayerEsriMapServer.js ***!
-  \*******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 12/7/2015.
-	 */
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var esriToOl = __webpack_require__(/*! ../olHelpers/esriToOlStyle */ 23);
-	var mapPopup_1 = __webpack_require__(/*! ../olHelpers/mapPopup */ 11);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerEsriMapServer;
-
-
-/***/ },
-/* 25 */
-/*!**************************************!*\
-  !*** ./dist/olHelpers/layerSwipe.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 6/1/2016.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerSwipe;
-
-
-/***/ }
-/******/ ]);
+!function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};t.m=e,t.c=o,t.i=function(e){return e},t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=36)}([function(e,t,o){"use strict";function n(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),o=window.gv,n=0;n<t.length;n++){void 0===o[t[n]]&&(o[t[n]]={}),o=o[t[n]]}return o}Object.defineProperty(t,"__esModule",{value:!0}),n("util"),window.gv.util.provide=n,t.default=n},function(e,t){e.exports=$},function(e,t){e.exports=ol},function(e,t,o){"use strict";function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}Object.defineProperty(t,"__esModule",{value:!0}),o(0).default("util").makeGuid=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(12);t.mapPopup=new n.default,t.default=t.mapPopup},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=n.default("olHelpers"),i=function(){function e(e){this._map=null,this._initialized=!1,this._subtype=e}return e.prototype.init=function(e){this._initialized||(this._map=e,this._initialized=!0)},Object.defineProperty(e.prototype,"map",{get:function(){return this._map},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"initialized",{get:function(){return this._initialized},enumerable:!0,configurable:!0}),e.prototype._checkInit=function(){if(!this.initialized){var e=this._subtype+" object not initialized";throw alert(e),console.log(e),e}},e.prototype.checkInit=function(){this._checkInit()},e}();t.MapInteractionBase=i,r.MapInteractionBase=i,t.default=i},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(11);t.mapMove=new n.default,t.default=t.mapMove},function(e,t,o){"use strict";function n(e){var t=r.quickMapBase(e);return a.default.init(t),l.default.init(t),t}Object.defineProperty(t,"__esModule",{value:!0});var r=o(13),i=o(0),a=o(6),l=o(4),s=i.default("olHelpers");t.quickMap=n,s.quickMap=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(14),r=o(0),i=o(3),a=o(1),l=r.default("layers"),s=function(){function e(e,t){if(void 0===t&&(t={}),t=t||{},"string"!=typeof e)throw"Invalid URL";this._url=e,this._params="object"==typeof t.params?t.params:{},this._legendCollapse="boolean"==typeof t.legendCollapse&&t.legendCollapse,this._legendCheckbox="boolean"!=typeof t.legendCheckbox||t.legendCheckbox,this.id=t.id||i.default(),this._name=t.name||"Unnamed Layer",this.animate=!1,this._opacity="number"==typeof t.opacity?t.opacity:1,this._opacity>1?this._opacity=1:this._opacity<0&&(this._opacity=0),this._visible="boolean"!=typeof t.visible||t.visible,this._source=void 0,this._olLayer=void 0,this._loaded=!1,this._maxResolution=n.zoomToResolution(t.minZoom),void 0!==this._maxResolution&&(this._maxResolution+=1e-5),this._minResolution=n.zoomToResolution(t.maxZoom),this._minZoom="number"==typeof t.minZoom?t.minZoom:void 0,this._maxZoom="number"==typeof t.maxZoom?t.maxZoom:void 0,this._zIndex="number"==typeof t.zIndex?t.zIndex:0,this.loadCallback="function"==typeof t.loadCallback?t.loadCallback:function(){},this._legendContent="",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>"):this._legendContent+='<label class="legend-layer-name">'+this.name+"</label>",this._$legendDiv=null,this._applyCollapseCalled=!1,this._addLegendContent("string"==typeof t.legendContent?t.legendContent:void 0)}return e.prototype._load=function(){return 1==this.loaded||(this._loaded=!0,!1)},e.prototype.getLegendDiv=function(){return'<div class="legend-layer-div" id="'+this.id+'-legend-layer-div">'+this._legendContent+"</div>"},e.prototype._addLegendContent=function(e){void 0===e&&(e=""),e.indexOf("<ul>")>-1&&(e='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'+e),this._legendContent+=e,this._$legendDiv=a("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0&&(this._$legendDiv.append(e),this.applyCollapse())},e.prototype.addLegendContent=function(e){this._addLegendContent(e)},e.prototype.applyCollapse=function(){if(this._applyCollapseCalled)return void console.log("collapse already applied");if(this._$legendDiv=a("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0){var e=this._$legendDiv.find(".legend-items-expander");e.length>0&&(this._applyCollapseCalled=!0,e.click(function(){var e=a(this);e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this._legendCollapse&&e.trigger("click"))}},e.prototype.refresh=function(){this.source&&this.source.refresh()},Object.defineProperty(e.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"animate",{get:function(){return this._animate},set:function(e){this._animate=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"legendContent",{get:function(){return this._legendContent},set:function(e){this._legendContent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"params",{get:function(){return this._params},set:function(e){this._params=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minResolution",{get:function(){return this._minResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxResolution",{get:function(){return this._maxResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minZoom",{get:function(){return this._minZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxZoom",{get:function(){return this._maxZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"visible",{get:function(){return this._visible},set:function(e){this.setVisible(e)},enumerable:!0,configurable:!0}),e.prototype.setVisible=function(e){this._visible=e,this.olLayer&&(this.olLayer.setVisible(this._visible),e&&!this._loaded&&this._load())},Object.defineProperty(e.prototype,"opacity",{get:function(){return this._opacity},set:function(e){this._opacity=e,this.olLayer&&this.olLayer.setOpacity(this._opacity)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"loaded",{get:function(){return this._loaded},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),e.prototype.getSource=function(){return this._source},Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(e){this._zIndex=e},enumerable:!0,configurable:!0}),e.prototype.setZIndex=function(e){},Object.defineProperty(e.prototype,"olLayer",{get:function(){return this.getOlLayer()},enumerable:!0,configurable:!0}),e.prototype.getOlLayer=function(){return this._olLayer},e}();t.LayerBase=s,l.LayerBase=s,t.default=s},function(e,t,o){"use strict";function n(e){return void 0===e||null===e}function r(e){return!n(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),a=i.default("util.checkDefined");t.undefinedOrNull=n,a.undefinedOrNull=n,t.definedAndNotNull=r,a.definedAndNotNull=r},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(8),i=o(16),a=o(4),l=o(0),s=o(2),p=o(1),u=l.default("layers"),c=function(e){function t(t,o){void 0===o&&(o={});var n=e.call(this,t,o)||this;return n._source=new s.source.TileArcGISRest({url:""==n.url?void 0:n.url,params:void 0===o.showLayers?void 0:{layers:"show:"+o.showLayers.join(",")}}),n._olLayer=new s.layer.Tile({source:n._source,visible:n.visible,opacity:n.opacity,minResolution:n._minResolution,maxResolution:n._maxResolution}),n._olLayer.setZIndex(n._zIndex),o.addPopup="boolean"==typeof o.addPopup&&o.addPopup,n._esriFormat=new s.format.EsriJSON,n._popupRequest=null,n.addLegendContent(),o.addPopup&&a.default.addMapServicePopup(n),n}return n(t,e),t.prototype.addLegendContent=function(t){var o=this,n=this.url;"/"!==n[n.length-1]&&(n+="/"),n+="legend?f=pjson&callback=?",p.get(n,{},function(t){var n=i.makeMapServiceLegend(t);e.prototype.addLegendContent.call(o,n)},"json")},t.prototype.getPopupInfo=function(e){if(this.visible){var t=this.url;"/"!=t[t.length-1]&&(t+="/"),t+="identify?callback=?";var o=this;null!=this._popupRequest&&this._popupRequest.abort(),this._popupRequest=p.get(t,e,function(e){for(var t=0,n=e.results;t<n.length;t++){var r=n[t],i='<table class="esri-popup-table">';for(var l in r.attributes)if(r.attributes.hasOwnProperty(l)){var s=r.attributes[l];if(null==s||"null"==s.toString().toLowerCase())continue;var p=l;p.length>14&&(p=p.slice(0,11)+"..."),i+="<tr><td>"+p+"</td><td>"+s+"</td></tr>"}i+="</table>",a.default.addMapServicePopupContent(o._esriFormat.readFeature(r),o,i,r.layerName)}},"json"),this._popupRequest.always(function(){o._popupRequest=null})}},Object.defineProperty(t.prototype,"source",{get:function(){return e.prototype.getSource.call(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return e.prototype.getOlLayer.call(this)},enumerable:!0,configurable:!0}),t}(r.LayerBase);t.LayerEsriMapServer=c,u.LayerEsriMapServer=c,t.default=c},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),i=o(9),a=o(0),l=o(3),s=o(1),p=a.default("olHelpers"),u=function(e){function t(){var t=e.call(this,"map move")||this;return t._arrLyrRequest=[],t._arrLyrTimeout=[],t._arrLayer=[],t._lookupLayer={},t._mapMoveCallbacks=[],t._mapMoveCallbacksLookup={},t._mapMoveCallbackDelays=[],t._mapMoveCallbackContext=[],t._mapMoveCallbackTimeout=[],t._mapExtent=void 0,t._zoomLevel=void 0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t),this.map.getView().on(["change:center","change:resolution"],function(e){o._updateMapExtent();for(var t=0;t<o._arrLayer.length;t++)o.triggerLyrLoad(o._arrLayer[t],t,e.type);for(var t=0;t<o._mapMoveCallbacks.length;t++)o.triggerMoveCallback(t,e.type)})},t.prototype._updateMapExtent=function(){var e=this.map.getView();this._zoomLevel=e.getZoom();var t=e.calculateExtent(this.map.getSize());this._mapExtent={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3]}},Object.defineProperty(t.prototype,"mapExtent",{get:function(){return this._mapExtent||this._updateMapExtent(),this._mapExtent},enumerable:!0,configurable:!0}),t.prototype.triggerLyrLoad=function(e,t,o){if(i.undefinedOrNull(e)&&i.undefinedOrNull(t))throw"need to define lyr or index";i.definedAndNotNull(e)&&i.undefinedOrNull(t)?t=this._arrLayer.indexOf(e):i.undefinedOrNull(e)&&i.definedAndNotNull(t)&&(e=this._arrLayer[t]),null!=this._arrLyrTimeout[t]&&(clearTimeout(this._arrLyrTimeout[t]),this._arrLyrTimeout[t]=null),null!=this._arrLyrRequest[t]&&4!=this._arrLyrRequest[t]&&(this._arrLyrRequest[t].abort(),this._arrLyrRequest[t]=null);var n=function(){};if(e.mapMoveBefore(this._zoomLevel,o)){e.mapMoveMakeGetParams(this._mapExtent,this._zoomLevel);var r=this;n=function(){function o(e,t){var o=this;this._arrLyrRequest[t]=s.get(e.url,e.mapMoveParams,function(t){e.mapMoveCallback(t),e.loadCallback()},"json").fail(function(t){"abort"!=t.statusText&&(console.log("failed"),console.log(e.url),console.log(e.mapMoveParams))}).always(function(){o._arrLyrTimeout[t]=null,o._arrLyrRequest[t]=null})}o.call(r,e,t)}}else e.clear();this._arrLyrTimeout[t]=setTimeout(n,e.onDemandDelay)},t.prototype.triggerMoveCallback=function(e,t,o){if(void 0===e&&void 0===o)throw"either the function index or the id must be defined";if("number"!=typeof e&&(e=this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[o])),e<0)return void console.log("function not found");null!=this._mapMoveCallbackTimeout[e]&&(clearTimeout(this._mapMoveCallbackTimeout[e]),this._mapMoveCallbackTimeout[e]=null);var n=this._mapMoveCallbackContext[e],r=this._mapMoveCallbacks[e],i=this,a=function(){null!==n?r.call(n,i._mapExtent,i._zoomLevel,t):r(i._mapExtent,i._zoomLevel,t)};this._mapMoveCallbackTimeout[e]=setTimeout(a,this._mapMoveCallbackDelays[e])},t.prototype.addVectorLayer=function(e,t){if(void 0===t&&(t=!0),this._arrLayer.indexOf(e)>-1)return void console.log("already added "+e.name+" to map move");this._checkInit(),this._arrLyrRequest.push(null),this._arrLyrTimeout.push(null),this._arrLayer.push(e),this._lookupLayer[e.id]=e,(t="boolean"!=typeof t||t)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerLyrLoad(e,this._arrLayer.length-1))},t.prototype.addCallback=function(e,t,o,n,r){if(this._mapMoveCallbacks.indexOf(e)>-1)return void console.log("this function already added to map move");this._checkInit(),r||(r=l.default()),this._mapMoveCallbacks.push(e),this._mapMoveCallbacksLookup[r]=r,this._mapMoveCallbackDelays.push("number"==typeof o?o:50),this._mapMoveCallbackContext.push(i.definedAndNotNull(t)?t:null),this._mapMoveCallbackTimeout.push(null),(n="boolean"!=typeof n||n)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerMoveCallback(this._mapMoveCallbacks.length-1))},t}(r.default);t.MapMoveCls=u,p.MapMoveCls=u,t.default=u},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),i=o(0),a=o(2),l=o(1),s=i.default("olHelpers"),p=function(){function e(e,t,o,n,r){this.feature=e,this.layer=t,this.layerIndex=o,this.selectionLayer=n,this.popupContent="",this.esriLayerName="string"==typeof r?r:void 0}return Object.defineProperty(e.prototype,"layerName",{get:function(){return"string"==typeof this.esriLayerName?this.esriLayerName:this.layer.name},enumerable:!0,configurable:!0}),e}();t.FeatureLayerProperties=p;var u=function(e){function t(){var t=e.call(this,"map popup")||this;return t._arrPopupLayerIds=[],t._arrPopupLayerNames=[],t._arrPopupLayers=[],t._arrPopupOlLayers=[],t._arrPopupContentFunction=[],t._$popupContainer=void 0,t._$popupContent=void 0,t._$popupCloser=void 0,t._popupOverlay=void 0,t._selectionLayers=[],t._selectionLayerLookup={},t._mapClickFunctions=[],t._popupChangedFunctions=[],t._esriMapServiceLayers=[],t._popupOpen=!1,t._popupCoordinate=null,t._passThroughLayerFeatureArray=[],t._currentPopupIndex=-1,t._popupContentLength=0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t);var n,r=this.map.getTarget();n=l("string"==typeof r?"#"+r:r),n.append('<div class="ol-popup"><span class="ol-popup-closer">X</span><div class="popup-content"></div></div>'),this._$popupContainer=n.find(".ol-popup"),this._$popupContent=n.find(".popup-content"),this._$popupCloser=n.find(".ol-popup-closer");var i=function(e){return a.easing.inAndOut(e)};return this._popupOverlay=new a.Overlay({element:this._$popupContainer[0],autoPan:!0,autoPanAnimation:{duration:250,source:t.getView().getCenter(),easing:i}}),this._map.addOverlay(this._popupOverlay),this._$popupCloser.click(function(e){o.closePopup()}),this._map.on("singleclick",function(e){if(o.closePopup(),o._popupCoordinate=e.coordinate,o._esriMapServiceLayers.length>0)for(var t={geometry:e.coordinate.join(","),geometryType:"esriGeometryPoint",layers:"all",sr:o._map.getView().getProjection().getCode().split(":")[1],mapExtent:o._map.getView().calculateExtent(o._map.getSize()).join(","),imageDisplay:o._map.getSize().join(",")+",96",returnGeometry:!0,tolerance:15,f:"pjson"},n=0,r=o._esriMapServiceLayers;n<r.length;n++){var i=r[n];i.getPopupInfo(t)}var a=o._featuresAtPixel(e.pixel);o._passThroughLayerFeatureArray=[],o._currentPopupIndex=-1;for(var l=0;l<a.length;l++){var s=a[l],p=s.feature.getProperties(),u=o._arrPopupContentFunction[s.layerIndex](p,o._$popupContent);u===!1||("string"==typeof u?(s.popupContent=u,o._passThroughLayerFeatureArray.push(s)):s.selectionLayer.getSource().addFeature(s.feature))}o._popupContentLength=o._passThroughLayerFeatureArray.length,o._currentPopupIndex=-1;var c='<div class="ol-popup-nav">';c+='<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>',c+='<span class="next-popup ol-popup-nav-arrow">&#9654;</span>',c+='<span class="current-popup-item-number" style="font-weight: bold;"></span>',c+="<span>&nbsp;of&nbsp;</span>",c+='<span class="popup-content-length" style="font-weight: bold;">'+o._popupContentLength+"</span>",c+="<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>",c+='<span class="current-popup-layer-name"></span>',c+="</div>",c+='<div class="ol-popup-inner">',c+="</div>",o._$popupContent.html(c),o._$popupContent.find(".previous-popup").click(function(){1!=o._popupContentLength&&(0==o._currentPopupIndex?o._currentPopupIndex=o._popupContentLength-1:o._currentPopupIndex--,o._triggerFeatSelect())});var d=o._$popupContent.find(".next-popup");d.click(function(){1==o._popupContentLength&&o._currentPopupIndex>-1||(o._currentPopupIndex==o._popupContentLength-1?o._currentPopupIndex=0:o._currentPopupIndex++,o._triggerFeatSelect())}),o._popupContentLength>0&&(d.trigger("click"),o._popupOverlay.setPosition(o._popupCoordinate),o._$popupContent.scrollTop(0),o._popupOpen=!0)}),this._map.on("pointermove",function(e){if(!e.dragging){var t=o.map.getEventPixel(e.originalEvent),n=o.map.hasFeatureAtPixel(t,function(e){for(var t=0,n=o._arrPopupOlLayers;t<n.length;t++){if(e==n[t])return!0}return!1});o.map.getTargetElement().style.cursor=n?"pointer":""}}),!0},t.prototype._triggerFeatSelect=function(){var e=this._$popupContent.find(".current-popup-item-number"),t=this._$popupContent.find(".ol-popup-inner"),o=this._$popupContent.find(".current-popup-layer-name");this.clearSelection();var n=this._passThroughLayerFeatureArray[this._currentPopupIndex];e.html((this._currentPopupIndex+1).toFixed()),o.html(n.layerName),t.html(n.popupContent),n.selectionLayer.getSource().addFeature(n.feature);for(var r=0,i=this._popupChangedFunctions;r<i.length;r++){(0,i[r])(this._$popupContent)}},t.prototype.addMapServicePopupContent=function(e,t,o,n){var r=new p(e,t,this._popupContentLength,this._selectionLayerLookup[t.id],n);r.popupContent=o,this._passThroughLayerFeatureArray.push(r),this._popupContentLength++,l(".popup-content-length").html(this._popupContentLength.toFixed()),this._popupOpen||(this._$popupContent.find(".next-popup").trigger("click"),this._popupOverlay.setPosition(this._popupCoordinate),this._$popupContent.scrollTop(0),this._popupOpen=!0)},t.prototype._featuresAtPixel=function(e){var t=this,o=[];return this.map.forEachFeatureAtPixel(e,function(e,n){var r=t._arrPopupOlLayers.indexOf(n);r>-1&&o.push(new p(e,t._arrPopupLayers[r],r,t._selectionLayers[r]))}),o},t.prototype.closePopup=function(){return this._checkInit(),this._popupOpen=!1,this._popupOverlay.setPosition(void 0),this._$popupCloser[0].blur(),this.clearSelection(),this._$popupContent.html(""),!1},t.prototype.addPopupChangedFunction=function(e){this._popupChangedFunctions.push(e)},t.prototype._addPopupLayer=function(e,t){this._checkInit(),t=t||{},t.color=t.color||"rgba(255,170,0,0.5)",t.width=t.width||10;var o;o=t.olStyle?t.olStyle:new a.style.Style({stroke:new a.style.Stroke({color:t.color,width:t.width}),image:new a.style.Circle({radius:7,fill:new a.style.Fill({color:t.color}),stroke:new a.style.Stroke({color:t.color,width:1})}),fill:new a.style.Fill({color:t.color})});var n=new a.layer.Vector({source:new a.source.Vector,style:o});return n.setZIndex(100),this._selectionLayers.push(n),this._selectionLayerLookup[e.id]=n,this.map.addLayer(n),n},t.prototype.addVectorPopup=function(e,t,o){var n=this._addPopupLayer(e,o);return this._arrPopupLayerIds.push(e.id),this._arrPopupLayerNames.push(e.name),this._arrPopupLayers.push(e),this._arrPopupOlLayers.push(e.olLayer),this._arrPopupContentFunction.push(t),n},t.prototype.removeVectorPopup=function(e){var t=this._arrPopupLayerIds.indexOf(e.id);t>-1&&(this._arrPopupLayerIds.splice(t,1),this._arrPopupLayerNames.splice(t,1),this._arrPopupLayers.splice(t,1),this._arrPopupOlLayers.splice(t,1),this._arrPopupContentFunction.splice(t,1),this._selectionLayers.splice(t,1),delete this._selectionLayerLookup[e.id])},t.prototype.addMapServicePopup=function(e,t){var o=this._addPopupLayer(e,t);return this._esriMapServiceLayers.push(e),o},t.prototype.clearSelection=function(){this._checkInit();for(var e=0;e<this._selectionLayers.length;e++)this._selectionLayers[e].getSource().clear();for(var t=0,o=this._mapClickFunctions;t<o.length;t++){(0,o[t])()}},t.prototype.addMapClickFunction=function(e){this._mapClickFunctions.push(e)},t}(r.default);t.MapPopupCls=u,s.MapPopupCls=u,t.default=u},function(e,t,o){"use strict";function n(e){e=e||{},e.divId=e.divId||"map",e.center=e.center||{x:-10018378,y:5574910},e.zoom="number"==typeof e.zoom?e.zoom:7,e.baseSwitcher="boolean"!=typeof e.baseSwitcher||e.baseSwitcher,e.fullScreen="boolean"==typeof e.fullScreen&&e.fullScreen,a("#"+e.divId).css("position","relative");var t=new i.layer.Tile({source:new i.source.OSM});if(e.baseSwitcher,e.zoom<0||e.zoom>28)throw"zoom out of range";if(e.center.x>=-180&&e.center.x<=180&&e.center.y>=-90&&e.center.y<=90){var o=new i.geom.Point([e.center.x,e.center.y]);new i.proj.Projection({code:"EPSG:4326"}),o.transform(new i.proj.Projection({code:"EPSG:4326"}),new i.proj.Projection({code:"EPSG:3857"}));var n=o.getCoordinates();e.center.x=n[0],e.center.y=n[1]}var r=i.control.defaults({attributionOptions:{collapsible:!1}}),l=new i.View({center:[e.center.x,e.center.y],zoom:e.zoom,minZoom:e.minZoom,maxZoom:e.maxZoom}),s=new i.Map({layers:[t],target:e.divId,controls:r,view:l});return e.fullScreen&&s.addControl(new i.control.FullScreen({})),s}Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),i=o(2),a=o(1),l=r.default("olHelpers");t.quickMapBase=n,l.quickMapBase=n,t.default=n},function(e,t,o){"use strict";function n(e){return"number"==typeof e?e%1==0&&e>=0&&e<=28?l[e]:void console.log("invalid zoom level provided: "+e):void 0}function r(e){for(var t=0;t<l.length;t++)if(e>=l[t])return t;return 0}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),a=i.default("olHelpers.zoomResolutionConvert"),l=[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,.5971642834779395,.29858214173896974,.14929107086948487,.07464553543474244,.03732276771737122,.01866138385868561,.009330691929342804,.004665345964671402,.002332672982335701,.0011663364911678506,.0005831682455839253];t.zoomToResolution=n,a.zoomToResolution=n,t.resolutionToZoom=r,a.resolutionToZoom=r},,function(e,t,o){"use strict";function n(e,t){return"rgba("+e[0]+","+e[1]+","+e[2]+","+t+")"}function r(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function i(e){var t=e.drawingInfo.renderer,o=null;switch(t.type){case"simple":switch(e.geometryType){case"esriGeometryPoint":o=new g(e,y);break;case"esriGeometryPolyline":o=new g(e,h);break;case"esriGeometryPolygon":o=new g(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;case"uniqueValue":switch(e.geometryType){case"esriGeometryPoint":o=new _(e,y);break;case"esriGeometryPolyline":o=new _(e,h);break;case"esriGeometryPolygon":o=new _(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;default:alert("not handled renderer type: "+t.type)}return null==o?{style:void 0,legend:""}:{style:o.olStyle,legend:o.legendHtml}}function a(e,t){void 0===t&&(t=!1),t="boolean"==typeof t&&t;var o=e.layerName,n=e.legend,i="";if(t||(i+='<span class="legend-layer-subitem">'+o+"</span>"),1==n.length)i='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[0].imageData+'">';else{t||(i+='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'),i+="<ul>";for(var a=0;a<n.length;a++)i+="<li>",i+='<span class="legend-layer-subitem">'+r(n[a].label)+"</span>",i+='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[a].imageData+'">',i+="</li>";i+="</ul>"}return t||(i='<span class="legend-layer-subitem">'+o+"</span>"+i),i}function l(e){var t="",o=e.layers;if(1==o.length)t+=a(o[0],!0);else{t+="<ul>";for(var n=0;n<o.length;n++)t+="<li>"+a(o[n])+"</li>";t+="</ul>"}return t}var s=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var p=o(0),u=o(2),c=p.default("olHelpers.esriToOlStyle");c.htmlEscape=r;var d=function(){function e(e,t){this.symbolObj=e,this.opacity=t,this.olStyle=void 0,this.legendHtml=""}return e}(),y=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSMS":var i=n(r.symbolObj.color,r.opacity),a=n(r.symbolObj.outline.color,r.opacity),l=r.symbolObj.outline.width,s=r.symbolObj.size;r.olStyle=new u.style.Style({image:new u.style.Circle({radius:s,fill:new u.style.Fill({color:i}),stroke:new u.style.Stroke({color:a,width:l})})}),r.legendHtml='<span class="legend-layer-icon" style="color: '+i+'">&#9679;</span>';break;case"esriPMS":r.olStyle=new u.style.Style({image:new u.style.Icon({src:"data:image/png;base64,"+r.symbolObj.imageData})}),r.legendHtml='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+r.symbolObj.imageData+'">';break;default:console.log(r.symbolObj),alert("Point symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),h=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSLS":var i=n(r.symbolObj.color,r.opacity),a=r.symbolObj.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:i,width:a})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+i+";",r.legendHtml+="width: 40px;",r.legendHtml+="height: 4px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: -1px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Line symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),f=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSFS":var i=n(r.symbolObj.color,r.opacity),a=n(r.symbolObj.outline.color,r.opacity),l=r.symbolObj.outline.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:a,width:l}),fill:new u.style.Fill({color:i})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+i+";",r.legendHtml+="border: solid "+a+" 1px;",r.legendHtml+="width: 40px;",r.legendHtml+="height: 9px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: 2px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Polygon symbol does handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),m=function(){function e(e){this.opacity=(100-(e.drawingInfo.transparency||0))/100,this.renderer=e.drawingInfo.renderer,this.olStyle=void 0,this.legendHtml=""}return e}(),g=function(e){function t(t,o){var n=e.call(this,t)||this;n.symbol=n.renderer.symbol;var r=new o(n.symbol,n.opacity);return n.olStyle=r.olStyle,n.legendHtml=r.legendHtml,n}return s(t,e),t}(m),_=function(e){function t(t,o){var n=e.call(this,t)||this;if(n.uniqueValueInfos=n.renderer.uniqueValueInfos,n.propertyName=n.renderer.field1,n.defaultSymbol=n.renderer.defaultSymbol,n.defaultSymbol){var i=new o(n.defaultSymbol,n.opacity);n.defaultStyle=i.olStyle,n.defaultLabelHtml='<span class="legend-layer-subitem">'+r(n.renderer.defaultLabel)+"</span>"+i.legendHtml}else n.defaultStyle=void 0,n.defaultLabelHtml="other";n.valueArray=[],n.labelArray=[],n.legendArray=[],n.propertyStyleLookup={};for(var a=0,l=n.uniqueValueInfos;a<l.length;a++){var s=l[a];n.labelArray.push(s.label),n.valueArray.push(s.value);var p=new o(s.symbol,n.opacity);n.legendArray.push('<span class="legend-layer-subitem">'+r(s.label)+"</span>"+p.legendHtml),n.propertyStyleLookup[s.value]=p.olStyle}n.olStyle=function(e){var t=e.getProperties(),o=t[n.propertyName];return void 0!==n.propertyStyleLookup[o]?[n.propertyStyleLookup[o]]:[n.defaultStyle]},null!==n.defaultLabelHtml&&n.legendArray.push(n.defaultLabelHtml),n.legendHtml="<ul>";for(var u=0,c=n.legendArray;u<c.length;u++){var d=c[u];n.legendHtml+="<li>"+d+"</li>"}return n.legendHtml+="</ul>",n}return s(t,e),t}(m);t.makeFeatureServiceLegendAndSymbol=i,c.makeFeatureServiceLegendAndSymbol=i,t.makeMapServiceLegend=l,c.makeMapServiceLegend=l},,,,,,,,,,,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=o(1),i=n.default("collections.layerSwipe"),a=function(){function e(e,t){void 0===t&&(t="");var o=this;t=t||"",this.leftLayers=[],this.rightLayers=[],this._percentRight=50,this.offset=null,this._map=e,this.$mapElement=r(e.getTargetElement()),this.$mapElement.append('<div class="layer-swiper">'+t+"</div>"),this.$swiper=this.$mapElement.find(".layer-swiper"),this.percentRight=this.percentRight,this.dragging=!1,this.$mapElement.mouseleave(function(){o.dragging=!1}),this.$swiper.bind("mousewheel DOMMouseScroll",function(e){e.preventDefault()}),this.$swiper.mousedown(function(e){o.dragging=!0,o.offset=e.offsetX}),r(window).mouseup(function(){o.dragging=!1}),this.$mapElement.mousemove(function(e){if(o.dragging){var t=o.$mapElement.position().left,n=o.$mapElement.width();o.percentRight=100*(e.pageX-o.offset-t)/n}})}return e.prototype.addLeftLayer=function(e){var t=this;this.leftLayers.indexOf(e)==-1&&(e.olLayer.on("precompose",function(e){var o=e.context,n=o.canvas.width*(t.percentRight/100);o.save(),o.beginPath(),o.rect(0,0,n,o.canvas.height),o.clip()}),e.olLayer.on("postcompose",function(e){e.context.restore()}),this.leftLayers.push(e))},e.prototype.addRightLayer=function(e){var t=this;this.rightLayers.indexOf(e)==-1&&(e.olLayer.on("precompose",function(e){var o=e.context,n=o.canvas.width*(t.percentRight/100);o.save(),o.beginPath(),o.rect(n,0,o.canvas.width-n,o.canvas.height),o.clip()}),e.olLayer.on("postcompose",function(e){e.context.restore()}),this.rightLayers.push(e))},Object.defineProperty(e.prototype,"percentRight",{get:function(){return this._percentRight},set:function(e){var t=this.$swiper.position().left+this.$swiper.width()>this.$mapElement.width();e<0||t&&e>this.percentRight||(this._percentRight=e,this.$swiper.css("left",this._percentRight.toFixed(2)+"%"),this._map.render())},enumerable:!0,configurable:!0}),e}();i.LayerSwipe=a,t.default=a},,,,,,,,,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(7),r=o(27),i=o(10),a=n.quickMap(),l=new r.default(a),s=new i.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer",{minZoom:6,maxZoom:12,name:"WisDOT Regions"}),p=new i.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer",{minZoom:7,visible:!0,name:"Metamanager Segments"}),u=new i.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer",{minZoom:7,visible:!0,name:"truck2014",showLayers:[8]}),c=new i.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer",{minZoom:7,visible:!0,name:"truck2015",showLayers:[9]});a.addLayer(s.olLayer),a.addLayer(u.olLayer),a.addLayer(c.olLayer),a.addLayer(p.olLayer),l.addLeftLayer(s),l.addRightLayer(p),l.addLeftLayer(u),l.addRightLayer(c)}]);
 //# sourceMappingURL=compare-test.js.map
\ No newline at end of file
diff --git a/test-html/js/compare-test.js.map b/test-html/js/compare-test.js.map
index a2d17f390437e2fac90a71d9c12132a746136910..ca8ff47b9111e7dc035b2c7368edfdffbd42ae25 100644
--- a/test-html/js/compare-test.js.map
+++ b/test-html/js/compare-test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3*","webpack:///./src/_test/compare-test.ts","webpack:///./src/olHelpers/quickMap.ts?1069","webpack:///./src/olHelpers/quickMapBase.ts?fb65","webpack:///./src/util/provide.ts?5c82","webpack:///external \"ol\"?81ed","webpack:///external \"$\"?57aa","webpack:///./src/olHelpers/mapMove.ts?6a2b","webpack:///./src/olHelpers/mapMoveCls.ts?cd45","webpack:///./src/olHelpers/mapInteractionBase.ts?f419","webpack:///./src/util/checkDefined.ts?bcd7","webpack:///./src/util/makeGuid.ts?e80e","webpack:///./src/olHelpers/mapPopup.ts?5d6c","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7","webpack:///./src/layers/LayerBase.ts?bf94","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b","webpack:///./src/olHelpers/esriToOlStyle.ts?9363","webpack:///./src/layers/LayerEsriMapServer.ts?9c85","webpack:///./src/olHelpers/layerSwipe.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport LayerSwipe from '../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../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// ./src/_test/compare-test.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\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","/**\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 = options || {} as quickMapOptions;\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/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 = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 4\n// module chunks = 0 2 3 7","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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","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 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","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 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 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","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","/**\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/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","/**\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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///compare-test.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d**","webpack:///../../src/util/provide.ts?0b57**","webpack:///external \"$\"?57aa**","webpack:///external \"ol\"?81ed**","webpack:///../../src/util/makeGuid.ts?60ef**","webpack:///../../src/olHelpers/mapPopup.ts?b204**","webpack:///../../src/olHelpers/mapInteractionBase.ts?98ee**","webpack:///../../src/olHelpers/mapMove.ts?aaca**","webpack:///../../src/olHelpers/quickMap.ts?6520**","webpack:///../../src/layers/LayerBase.ts?8ea5**","webpack:///../../src/util/checkDefined.ts?f518**","webpack:///../../src/layers/LayerEsriMapServer.ts?6a5c*","webpack:///../../src/olHelpers/mapMoveCls.ts?0965**","webpack:///../../src/olHelpers/mapPopupCls.ts?505f**","webpack:///../../src/olHelpers/quickMapBase.ts?e5d6**","webpack:///../../src/olHelpers/zoomResolutionConvert.ts?1717**","webpack:///../../src/olHelpers/esriToOlStyle.ts?40ab*","webpack:///../../src/olHelpers/layerSwipe.ts","webpack:///../../src/_test/compare-test.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","provide","namespace","window","parts","split","nameSpace","length","util","default","$","ol","makeGuid","replace","r","Math","random","toString","mapPopupCls_1","mapPopup","provide_1","nm","MapInteractionBase","subtype","this","_map","_initialized","_subtype","init","theMap","_checkInit","initialized","msg","alert","console","log","checkInit","mapMoveCls_1","mapMove","quickMap","options","quickMapBase_1","quickMapBase","mapMove_1","mapPopup_1","zoomResolutionConvert","makeGuid_1","LayerBase","url","_url","_params","params","_legendCollapse","legendCollapse","_legendCheckbox","legendCheckbox","id","_name","animate","_opacity","opacity","_visible","visible","_source","undefined","_olLayer","_loaded","_maxResolution","zoomToResolution","minZoom","_minResolution","maxZoom","_minZoom","_maxZoom","_zIndex","zIndex","loadCallback","_legendContent","_$legendDiv","_applyCollapseCalled","_addLegendContent","legendContent","_load","loaded","getLegendDiv","additionalContent","indexOf","append","applyCollapse","addLegendContent","$expander","find","click","$this","siblings","slideToggle","hasClass","removeClass","html","addClass","trigger","refresh","source","_id","set","newId","_animate","newVal","newParams","visibility","setVisible","olLayer","setOpacity","newName","getSource","newZ","setZIndex","getOlLayer","undefinedOrNull","input","definedAndNotNull","__extends","extendStatics","setPrototypeOf","__proto__","Array","b","__","constructor","create","LayerBase_1","esriToOl","LayerEsriMapServer","_super","_this","TileArcGISRest","showLayers","layers","join","layer","Tile","minResolution","maxResolution","addPopup","_esriFormat","format","EsriJSON","_popupRequest","addMapServicePopup","urlCopy","newHtml","makeMapServiceLegend","getPopupInfo","queryParams","__this","abort","_i","_a","popupHtml","a","attrVal","toLowerCase","attr","slice","addMapServicePopupContent","readFeature","always","mapInteractionBase_1","checkDefined","MapMoveCls","_arrLyrRequest","_arrLyrTimeout","_arrLayer","_lookupLayer","_mapMoveCallbacks","_mapMoveCallbacksLookup","_mapMoveCallbackDelays","_mapMoveCallbackContext","_mapMoveCallbackTimeout","_mapExtent","_zoomLevel","map","getView","on","e","_updateMapExtent","triggerLyrLoad","type","triggerMoveCallback","theView","getZoom","extentArray","calculateExtent","getSize","minX","minY","maxX","maxY","lyr","index","eventType","clearTimeout","callbackFunc","mapMoveBefore","mapMoveMakeGetParams","__this_1","innerFunction","theLayer","theIndex","_innerThis","mapMoveParams","mapMoveCallback","fail","jqXHR","statusText","clear","setTimeout","onDemandDelay","ind","functionId","ctx","theFunc","f","addVectorLayer","triggerOnAdd","push","addCallback","func","context","delay","FeatureLayerProperties","feature","layerIndex","selectionLayer","esriLayerName","popupContent","MapPopupCls","_arrPopupLayerIds","_arrPopupLayerNames","_arrPopupLayers","_arrPopupOlLayers","_arrPopupContentFunction","_$popupContainer","_$popupContent","_$popupCloser","_popupOverlay","_selectionLayers","_selectionLayerLookup","_mapClickFunctions","_popupChangedFunctions","_esriMapServiceLayers","_popupOpen","_popupCoordinate","_passThroughLayerFeatureArray","_currentPopupIndex","_popupContentLength","$map","target","getTarget","_ease","easing","inAndOut","Overlay","element","autoPan","autoPanAnimation","duration","getCenter","addOverlay","evt","closePopup","geometry","geometryType","sr","getProjection","getCode","mapExtent","imageDisplay","returnGeometry","tolerance","layerFeatureObjectArray","_featuresAtPixel","featObj","props","getProperties","popupContentResponse","addFeature","_triggerFeatSelect","nextPopup","setPosition","scrollTop","pixel","getEventPixel","hit","hasFeatureAtPixel","lyrCandidate","getTargetElement","style","cursor","$currentPopupItemNumber","$innerPopup","$layerNameSpan","clearSelection","lyrFeatObj","toFixed","layerName","esriName","featLayerObject","forEachFeatureAtPixel","lyrIndex","blur","addPopupChangedFunction","chgFunction","_addPopupLayer","selectionStyle","color","width","theStyle","olStyle","Style","stroke","Stroke","image","Circle","radius","fill","Fill","Vector","addLayer","addVectorPopup","popupContentFunction","removeVectorPopup","idx","splice","addMapClickFunction","divId","center","x","y","zoom","baseSwitcher","fullScreen","css","osmLayer","OSM","geom","Point","proj","Projection","code","transform","coordinates","getCoordinates","controls","control","defaults","attributionOptions","collapsible","view","View","Map","addControl","FullScreen","zoomLevel","_zoomResLookup","resolutionToZoom","resolution","_colorArrayToRgba","colorArray","htmlEscape","str","String","makeFeatureServiceLegendAndSymbol","esriResponse","renderer","drawingInfo","symbolLegendOut","SingleSymbol","PointSymbol","LineSymbol","PolygonSymbol","UniqueValueSymbol","legend","legendHtml","mapServiceLegendItem","lyrObject","skipLayerNameAndExpander","legendItems","newLegendHtml","CommonSymbol","symbolObj","innerColor","outerColor","outline","outlineWidth","size","Icon","src","lineWidth","SymbolGenerator","SymbolClass","symbol","uniqueValueInfos","propertyName","defaultSymbol","defaultStyle","defaultLabelHtml","valueArray","labelArray","legendArray","propertyStyleLookup","uniqueVal","uniqueSym","checkProperties","checkProperty","_b","_c","h","LayerSwipe","sliderContent","leftLayers","rightLayers","_percentRight","offset","$mapElement","$swiper","percentRight","dragging","mouseleave","bind","preventDefault","mousedown","offsetX","mouseup","mousemove","mapLeft","position","left","mapWidth","pageX","addLeftLayer","event","canvas","save","beginPath","rect","height","clip","restore","addRightLayer","percent","maxed","render","quickMap_1","layerSwipe_1","LayerEsriMapServer_1","swiper","wisDotRegions","metamanagerSegments","truckSpeed2014","truckSpeed2015"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,MDMM,SAAUvB,EAAQD,EAASH,GAEjC,YE9DA,SAAA4B,GAAiBC,GAEc,SAAhBC,OAAW,KAClBA,OAAW,MAMf,KAAK,GAHDC,GAAQF,EAAUG,MAAM,KACxBC,EAAYH,OAAW,GAElBzB,EAAE,EAAGA,EAAG0B,EAAMG,OAAQ7B,IAAI,CAGP,SAFR4B,EAAUF,EAAM1B,MAG5B4B,EAAUF,EAAM1B,QAGpB4B,EAAYA,EAAUF,EAAM1B,IAGhC,MAAO4B,GFgDXlB,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,IE7CtDkB,EAAQ,QACRE,OAAW,GAAEK,KAAKP,QAAUA,EAE5BzB,EAAAiC,QAAeR,GFuET,SAAUxB,EAAQD,GG1GxBC,EAAAD,QAAAkC,GHgHM,SAAUjC,EAAQD,GIhHxBC,EAAAD,QAAAmC,IJsHM,SAAUlC,EAAQD,EAASH,GAEjC,YK5GA,SAAAuC,KACQ,MAAO,uCACFC,QAAQ,QAAS,SAAU/B,GACxB,GAAIgC,GAAoB,GAAhBC,KAAKC,SAAgB,CAE7B,QAFyC,KAALlC,EAAWgC,EAAQ,EAAJA,EAAU,GAEpDG,SAAS,ML4GlC7B,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,IKzHtDV,EAAA,GACSoC,QAAQ,QAgBdG,SAAWA,EACdpC,EAAAiC,QAAeG,GL2HT,SAAUnC,EAAQD,EAASH,GAEjC,YAKAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GMpJtD,IAAAmC,GAAA7C,EAAA,GAMaG,GAAA2C,SAAW,GAAID,GAAAT,QAC5BjC,EAAAiC,QAAejC,EAAA2C,UNyJT,SAAU1C,EAAQD,EAASH,GAEjC,YAEAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GOrKtD,IAAAqC,GAAA/C,EAAA,GAEMgD,EAAKD,EAAAX,QAAQ,aAOnBa,EAAA,WASI,QAAAA,GAAYC,GACRC,KAAKC,KAAO,KACZD,KAAKE,cAAe,EACpBF,KAAKG,SAAWJ,EAkDxB,MA1CID,GAAAzB,UAAA+B,KAAA,SAAKC,GACIL,KAAKE,eACNF,KAAKC,KAAOI,EACZL,KAAKE,cAAe,IAQ5BtC,OAAAC,eAAIiC,EAAAzB,UAAA,OPgKAL,IOhKJ,WACI,MAAOgC,MAAKC,MPkKZlC,YAAY,EACZD,cAAc,IO5JlBF,OAAAC,eAAIiC,EAAAzB,UAAA,ePmKAL,IOnKJ,WACI,MAAOgC,MAAKE,cPqKZnC,YAAY,EACZD,cAAc,IO/JlBgC,EAAAzB,UAAAiC,WAAA,WACI,IAAKN,KAAKO,YAAa,CACnB,GAAIC,GAASR,KAAKG,SAAQ,yBAG1B,MAFAM,OAAMD,GACNE,QAAQC,IAAIH,GACNA,IAOdV,EAAAzB,UAAAuC,UAAA,WACIZ,KAAKM,cAEbR,IA9Da9C,GAAA8C,qBAgEbD,EAAGC,mBAAqBA,EACxB9C,EAAAiC,QAAea,GP0KT,SAAU7C,EAAQD,EAASH,GAEjC,YAKAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GQ1PtD,IAAAsD,GAAAhE,EAAA,GAOaG,GAAA8D,QAAU,GAAID,GAAA5B,QAC3BjC,EAAAiC,QAAejC,EAAA8D,SR8PT,SAAU7D,EAAQD,EAASH,GAEjC,YSjPA,SAAAkE,GAAyBC,GACrB,GAAI3D,GAAI4D,EAAAC,aAAaF,EAIrB,OAHAG,GAAAlC,QAAQmB,KAAK/C,GACb+D,EAAAnC,QAASmB,KAAK/C,GAEPA,ETiPXO,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,GS7QtD,IAAA0D,GAAApE,EAAA,IACA+C,EAAA/C,EAAA,GACAsE,EAAAtE,EAAA,GACAuE,EAAAvE,EAAA,GAEIgD,EAAKD,EAAAX,QAAQ,YAkBjBjC,GAAA+D,WASAlB,EAAGkB,SAAWA,EACd/D,EAAAiC,QAAe8B,GT+QT,SAAU9D,EAAQD,EAASH,GAEjC,YAEAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GUxTtD,IAAA8D,GAAAxE,EAAA,IACA+C,EAAA/C,EAAA,GAEAyE,EAAAzE,EAAA,GACAqC,EAAArC,EAAA,GAEMgD,EAAKD,EAAAX,QAAQ,UAuBnBsC,EAAA,WA2CI,QAAAA,GAAYC,EAAaR,GAGrB,GAHqB,SAAAA,UACrBA,EAAUA,MAES,gBAARQ,GACP,KAAM,aAEVxB,MAAKyB,KAAOD,EAGZxB,KAAK0B,QAAmC,gBAAlBV,GAAQW,OAAqBX,EAAQW,UAC3D3B,KAAK4B,gBAAmD,iBAA1BZ,GAAQa,gBAA8Bb,EAAQa,eAC5E7B,KAAK8B,gBAAmD,iBAA1Bd,GAAQe,gBAA8Bf,EAAQe,eAE5E/B,KAAKgC,GAAKhB,EAAQgB,IAAMV,EAAArC,UACxBe,KAAKiC,MAAQjB,EAAQvD,MAAQ,gBAC7BuC,KAAKkC,SAAU,EACflC,KAAKmC,SAAqC,gBAAnBnB,GAAQoB,QAAsBpB,EAAQoB,QAAU,EAEnEpC,KAAKmC,SAAW,EAChBnC,KAAKmC,SAAW,EACTnC,KAAKmC,SAAW,IACvBnC,KAAKmC,SAAW,GAGpBnC,KAAKqC,SAAsC,iBAApBrB,GAAQsB,SAAwBtB,EAAQsB,QAE/DtC,KAAKuC,QAAUC,OAMfxC,KAAKyC,SAAWD,OAChBxC,KAAK0C,SAAU,EAEf1C,KAAK2C,eAAiBtB,EAAsBuB,iBAAiB5B,EAAQ6B,SAClC,SAAxB7C,KAAK2C,iBACZ3C,KAAK2C,gBAAkB,MAE3B3C,KAAK8C,eAAiBzB,EAAsBuB,iBAAiB5B,EAAQ+B,SAErE/C,KAAKgD,SAAqC,gBAAnBhC,GAAQ6B,QAAsB7B,EAAQ6B,QAAUL,OACvExC,KAAKiD,SAAqC,gBAAnBjC,GAAQ+B,QAAsB/B,EAAQ+B,QAAUP,OACvExC,KAAKkD,QAAmC,gBAAlBlC,GAAQmC,OAAqBnC,EAAQmC,OAAS,EAEpEnD,KAAKoD,aAA8C,kBAAxBpC,GAAQoC,aAA6BpC,EAAQoC,aAAe,aAIvFpD,KAAKqD,eAAiB,GAElBrD,KAAK8B,iBACL9B,KAAKqD,gBAAkB,2BAA0BrD,KAAKsC,QAAU,UAAY,IAAE,6BAC9CtC,KAAKgC,GAAE,qCACvChC,KAAKqD,gBAAkB,eAAerD,KAAKgC,GAAE,kDAAkDhC,KAAKvC,KAAI,YAExGuC,KAAKqD,gBAAkB,oCAAoCrD,KAAKvC,KAAI,WAGxEuC,KAAKsD,YAAc,KACnBtD,KAAKuD,sBAAuB,EAC5BvD,KAAKwD,kBAAmD,gBAA1BxC,GAAQyC,cAA6BzC,EAAQyC,cAAgBjB,QAgTnG,MAxSIjB,GAAAlD,UAAAqF,MAAA,WACI,MAAmB,IAAf1D,KAAK2D,SAGL3D,KAAK0C,SAAU,GAER,IAQfnB,EAAAlD,UAAAuF,aAAA,WACI,MAAO,qCAAqC5D,KAAKgC,GAAE,sBAAsBhC,KAAKqD,eAAc,UAQhG9B,EAAAlD,UAAAmF,kBAAA,SAAkBK,GAAA,SAAAA,MAAA,IAEIA,EAAkBC,QAAQ,SAAU,IAGlDD,EAAoB,6EAA+EA,GAGvG7D,KAAKqD,gBAAkBQ,EAEvB7D,KAAKsD,YAAcpE,EAAE,IAAIc,KAAKgC,GAAE,qBAE5BhC,KAAKsD,YAAYvE,OAAS,IAC1BiB,KAAKsD,YAAYS,OAAOF,GACxB7D,KAAKgE,kBAQbzC,EAAAlD,UAAA4F,iBAAA,SAAiBJ,GACb7D,KAAKwD,kBAAkBK,IAG3BtC,EAAAlD,UAAA2F,cAAA,WACI,GAAIhE,KAAKuD,qBAGL,WAFA7C,SAAQC,IAAI,2BAOhB,IAFAX,KAAKsD,YAAcpE,EAAE,IAAIc,KAAKgC,GAAE,qBAE5BhC,KAAKsD,YAAYvE,OAAS,EAAG,CAE7B,GAAImF,GAAYlE,KAAKsD,YAAYa,KAAK,yBAElCD,GAAUnF,OAAS,IACnBiB,KAAKuD,sBAAuB,EAE5BW,EAAUE,MAAM,WACZ,GAAIC,GAAQnF,EAAEc,KAEdqE,GAAMC,SAAS,MAAMC,cAEjBF,EAAMG,SAAS,iCACfH,EAAMI,YAAY,gCAClBJ,EAAMK,KAAK,aAEXL,EAAMM,SAAS,gCACfN,EAAMK,KAAK,cAIf1E,KAAK4B,iBACLsC,EAAUU,QAAQ,YASlCrD,EAAAlD,UAAAwG,QAAA,WACQ7E,KAAK8E,QACL9E,KAAK8E,OAAOD,WAIpBjH,OAAAC,eAAI0D,EAAAlD,UAAA,MV8OAL,IU9OJ,WACI,MAAOgC,MAAK+E,KVgPZC,IU7OJ,SAAOC,GACHjF,KAAK+E,IAAME,GV+OXlH,YAAY,EACZD,cAAc,IU7OlBF,OAAAC,eAAI0D,EAAAlD,UAAA,WVgPAL,IUhPJ,WACI,MAAOgC,MAAKkF,UVkPZF,IU/OJ,SAAY9C,GACRlC,KAAKkF,SAAWhD,GViPhBnE,YAAY,EACZD,cAAc,IU3OlBF,OAAAC,eAAI0D,EAAAlD,UAAA,iBVkPAL,IUlPJ,WACI,MAAOgC,MAAKqD,gBVyPZ2B,IUjPJ,SAAkBG,GACdnF,KAAKqD,eAAiB8B,GVmPtBpH,YAAY,EACZD,cAAc,IU7OlBF,OAAAC,eAAI0D,EAAAlD,UAAA,UVoPAL,IUpPJ,WACI,MAAOgC,MAAK0B,SV2PZsD,IUnPJ,SAAWI,GACPpF,KAAK0B,QAAU0D,GVqPfrH,YAAY,EACZD,cAAc,IU/OlBF,OAAAC,eAAI0D,EAAAlD,UAAA,iBVsPAL,IUtPJ,WACI,MAAOgC,MAAK8C,gBVwPZ/E,YAAY,EACZD,cAAc,IUlPlBF,OAAAC,eAAI0D,EAAAlD,UAAA,iBVyPAL,IUzPJ,WACI,MAAOgC,MAAK2C,gBV2PZ5E,YAAY,EACZD,cAAc,IUrPlBF,OAAAC,eAAI0D,EAAAlD,UAAA,WV4PAL,IU5PJ,WACI,MAAOgC,MAAKgD,UV8PZjF,YAAY,EACZD,cAAc,IUxPlBF,OAAAC,eAAI0D,EAAAlD,UAAA,WV+PAL,IU/PJ,WACI,MAAOgC,MAAKiD,UViQZlF,YAAY,EACZD,cAAc,IU3PlBF,OAAAC,eAAI0D,EAAAlD,UAAA,OVkQAL,IUlQJ,WACI,MAAOgC,MAAKyB,MVoQZ1D,YAAY,EACZD,cAAc,IU9PlBF,OAAAC,eAAI0D,EAAAlD,UAAA,WVqQAL,IUrQJ,WACI,MAAOgC,MAAKqC,UV2QZ2C,IUpQJ,SAAYK,GACRrF,KAAKsF,WAAWD,IVsQhBtH,YAAY,EACZD,cAAc,IUpQRyD,EAAAlD,UAAAiH,WAAV,SAAqBD,GACjBrF,KAAKqC,SAAWgD,EACZrF,KAAKuF,UACLvF,KAAKuF,QAAQD,WAAWtF,KAAKqC,UACzBgD,IAAerF,KAAK0C,SACpB1C,KAAK0D,UAUjB9F,OAAAC,eAAI0D,EAAAlD,UAAA,WVqQAL,IUrQJ,WACI,MAAOgC,MAAKmC,UV2QZ6C,IUpQJ,SAAY5C,GACRpC,KAAKmC,SAAWC,EACZpC,KAAKuF,SACLvF,KAAKuF,QAAQC,WAAWxF,KAAKmC,WVuQjCpE,YAAY,EACZD,cAAc,IUhQlBF,OAAAC,eAAI0D,EAAAlD,UAAA,QVuQAL,IUvQJ,WACI,MAAOgC,MAAKiC,OV6QZ+C,IUtQJ,SAASS,GACLzF,KAAKiC,MAAQwD,GVwQb1H,YAAY,EACZD,cAAc,IUlQlBF,OAAAC,eAAI0D,EAAAlD,UAAA,UVyQAL,IUzQJ,WACI,MAAOgC,MAAK0C,SV2QZ3E,YAAY,EACZD,cAAc,IUrQlBF,OAAAC,eAAI0D,EAAAlD,UAAA,UV4QAL,IU5QJ,WACI,MAAOgC,MAAK0F,aV8QZ3H,YAAY,EACZD,cAAc,IU3QRyD,EAAAlD,UAAAqH,UAAV,WACI,MAAO1F,MAAKuC,SAMhB3E,OAAAC,eAAI0D,EAAAlD,UAAA,UV6QAL,IU7QJ,WACI,MAAOgC,MAAKkD,SVkRZ8B,IU5QJ,SAAWW,GACP3F,KAAKkD,QAAUyC,GV8Qf5H,YAAY,EACZD,cAAc,IU5QRyD,EAAAlD,UAAAuH,UAAV,SAAoBD,KAOpB/H,OAAAC,eAAI0D,EAAAlD,UAAA,WV6QAL,IU7QJ,WACI,MAAOgC,MAAK6F,cV+QZ9H,YAAY,EACZD,cAAc,IU7QRyD,EAAAlD,UAAAwH,WAAV,WACI,MAAO7F,MAAKyC,UAEpBlB,IAxZsBvE,GAAAuE,YA0ZtB1B,EAAG0B,UAAYA,EACfvE,EAAAiC,QAAesC,GVqRT,SAAUtE,EAAQD,EAASH,GAEjC,YWvsBA,SAAAiJ,GAAiCC,GAG7B,MAAyB,UAAVA,GAAmC,OAAVA,EAW5C,QAAAC,GAAmCD,GAG/B,OAASD,EAAgBC,GXwrB7BnI,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,GWjtBtD,IAAAqC,GAAA/C,EAAA,GACIgD,EAAKD,EAAAX,QAAQ,oBAOjBjC,GAAA8I,kBAMAjG,EAAGiG,gBAAkBA,EAQrB9I,EAAAgJ,oBAMAnG,EAAGmG,kBAAoBA,GXktBjB,SAAU/I,EAAQD,EAASH,GAEjC,YAEA,IAAIoJ,GAAajG,MAAQA,KAAKiG,WAAc,WACxC,GAAIC,GAAgBtI,OAAOuI,iBACpBC,uBAA2BC,QAAS,SAAU7I,EAAG8I,GAAK9I,EAAE4I,UAAYE,IACvE,SAAU9I,EAAG8I,GAAK,IAAK,GAAI/H,KAAK+H,GAAOA,EAAEhI,eAAeC,KAAIf,EAAEe,GAAK+H,EAAE/H,IACzE,OAAO,UAAUf,EAAG8I,GAEhB,QAASC,KAAOvG,KAAKwG,YAAchJ,EADnC0I,EAAc1I,EAAG8I,GAEjB9I,EAAEa,UAAkB,OAANiI,EAAa1I,OAAO6I,OAAOH,IAAMC,EAAGlI,UAAYiI,EAAEjI,UAAW,GAAIkI,OAGvF3I,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GYzvBtD,IAAAmJ,GAAA7J,EAAA,GACA8J,EAAA9J,EAAA,IACAuE,EAAAvE,EAAA,GACA+C,EAAA/C,EAAA,GACAsC,EAAAtC,EAAA,GACAqC,EAAArC,EAAA,GAEMgD,EAAKD,EAAAX,QAAQ,UAYnB2H,EAAA,SAAAC,GAuBI,QAAAD,GAAYpF,EAAKR,GAAA,SAAAA,SAAjB,IAAA8F,GAEID,EAAAzJ,KAAA4C,KAAMwB,EAAKR,IAAQhB,IZuwBnB,OYtwBA8G,GAAKvE,QAAU,GAAIpD,GAAG2F,OAAOiC,gBAErBvF,IAAiB,IAAZsF,EAAKtF,IAAYgB,OAAYsE,EAAKtF,IACvCG,OAAqC,SAAtBX,EAAQgG,WAA4BxE,QAAayE,OAAQ,QAAUjG,EAAQgG,WAAWE,KAAK,QAIlHJ,EAAKrE,SAAW,GAAItD,GAAGgI,MAAMC,MACzBtC,OAAQgC,EAAKvE,QACbD,QAASwE,EAAKxE,QACdF,QAAS0E,EAAK1E,QACdiF,cAAeP,EAAKhE,eACpBwE,cAAeR,EAAKnE,iBAGxBmE,EAAKrE,SAASmD,UAAUkB,EAAK5D,SAE7BlC,EAAQuG,SAAsC,iBAApBvG,GAAQuG,UAAwBvG,EAAQuG,SAElET,EAAKU,YAAc,GAAIrI,GAAGsI,OAAOC,SACjCZ,EAAKa,cAAgB,KAErBb,EAAK7C,mBAEDjD,EAAQuG,UACRnG,EAAAnC,QAAS2I,mBAAmBd,GZ6uBzBA,EYhpBf,MAhJwCb,GAAAW,EAAAC,GA2DpCD,EAAAvI,UAAA4F,iBAAA,SAAiBJ,GAAjB,GAAAiD,GAAA9G,KACQ6H,EAAU7H,KAAKwB,GAEiB,OAAhCqG,EAAQA,EAAQ9I,OAAS,KACzB8I,GAAW,KAGfA,GAAW,4BAEX3I,EAAElB,IAAI6J,KAAa,SAACrK,GAChB,GAAIsK,GAAUnB,EAASoB,qBAAqBvK,EAC5CqJ,GAAAxI,UAAM4F,iBAAgB7G,KAAA0J,EAACgB,IACxB,SAIPlB,EAAAvI,UAAA2J,aAAA,SAAaC,GACT,GAAKjI,KAAKsC,QAAV,CAIA,GAAIuF,GAAU7H,KAAKwB,GAEgB,MAA/BqG,EAAQA,EAAQ9I,OAAS,KACzB8I,GAAW,KAGfA,GAAW,qBAEX,IAAIK,GAASlI,IAEa,OAAtBA,KAAK2H,eACL3H,KAAK2H,cAAcQ,QAIvBnI,KAAK2H,cAAgBzI,EAAElB,IAAI6J,EAASI,EAAa,SAAUzK,GACvD,IAAc,GAAA4K,GAAA,EAAAC,EAAA7K,EAAW,QAAX4K,EAAAC,EAAAtJ,OAAAqJ,IAAY,CAArB,GAAI9I,GAAC+I,EAAAD,GAEFE,EAAY,kCAEhB,KAAK,GAAIC,KAAKjJ,GAAc,WACxB,GAAIA,EAAc,WAAEhB,eAAeiK,GAAI,CACnC,GAAIC,GAAUlJ,EAAc,WAAEiJ,EAE9B,IAAe,MAAXC,GAAuD,QAApCA,EAAQ/I,WAAWgJ,cACtC,QAGJ,IAAIC,GAAOH,CACPG,GAAK3J,OAAS,KACd2J,EAAOA,EAAKC,MAAM,EAAG,IAAM,OAG/BL,GAAa,WAAWI,EAAI,YAAYF,EAAO,aAIvDF,GAAa,WAEblH,EAAAnC,QAAS2J,0BAA0BV,EAAOV,YAAYqB,YAAYvJ,GAAI4I,EAAQI,EAAWhJ,EAAa,aAE3G,QAEHU,KAAK2H,cAAcmB,OAAO,WACtBZ,EAAOP,cAAgB,SAS/B/J,OAAAC,eAAI+I,EAAAvI,UAAA,UZwtBAL,IYxtBJ,WACI,MAAO6I,GAAAxI,UAAMqH,UAAStI,KAAA4C,OZ0tBtBjC,YAAY,EACZD,cAAc,IYptBlBF,OAAAC,eAAI+I,EAAAvI,UAAA,WZ2tBAL,IY3tBJ,WACI,MAAO6I,GAAAxI,UAAMwH,WAAUzI,KAAA4C,OZ6tBvBjC,YAAY,EACZD,cAAc,IY5tBtB8I,GAhJwCF,EAAAnF,UAA3BvE,GAAA4J,qBAiJb/G,EAAG+G,mBAAqBA,EACxB5J,EAAAiC,QAAe2H,GZquBT,SAAU3J,EAAQD,EAASH,GAEjC,YAEA,IAAIoJ,GAAajG,MAAQA,KAAKiG,WAAc,WACxC,GAAIC,GAAgBtI,OAAOuI,iBACpBC,uBAA2BC,QAAS,SAAU7I,EAAG8I,GAAK9I,EAAE4I,UAAYE,IACvE,SAAU9I,EAAG8I,GAAK,IAAK,GAAI/H,KAAK+H,GAAOA,EAAEhI,eAAeC,KAAIf,EAAEe,GAAK+H,EAAE/H,IACzE,OAAO,UAAUf,EAAG8I,GAEhB,QAASC,KAAOvG,KAAKwG,YAAchJ,EADnC0I,EAAc1I,EAAG8I,GAEjB9I,EAAEa,UAAkB,OAANiI,EAAa1I,OAAO6I,OAAOH,IAAMC,EAAGlI,UAAYiI,EAAEjI,UAAW,GAAIkI,OAGvF3I,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,Ga15BtD,IAAAwL,GAAAlM,EAAA,GACAmM,EAAAnM,EAAA,GACA+C,EAAA/C,EAAA,GACAyE,EAAAzE,EAAA,GAEAqC,EAAArC,EAAA,GACMgD,EAAKD,EAAAX,QAAQ,aAyBnBgK,EAAA,SAAApC,GAgBI,QAAAoC,KAAA,GAAAnC,GACID,EAAAzJ,KAAA4C,KAAM,aAAWA,Ibu4BjB,Oat4BA8G,GAAKoC,kBACLpC,EAAKqC,kBACLrC,EAAKsC,aACLtC,EAAKuC,gBAELvC,EAAKwC,qBACLxC,EAAKyC,2BACLzC,EAAK0C,0BACL1C,EAAK2C,2BACL3C,EAAK4C,2BAEL5C,EAAK6C,WAAanH,OAClBsE,EAAK8C,WAAapH,Ob03BXsE,EatpBf,MAlQgCb,GAAAgD,EAAApC,GAsC5BoC,EAAA5K,UAAA+B,KAAA,SAAKC,GAAL,GAAAyG,GAAA9G,IACI6G,GAAAxI,UAAM+B,KAAIhD,KAAA4C,KAACK,GAEXL,KAAK6J,IAAIC,UAAUC,IAAI,gBAAiB,qBAAsB,SAACC,GAE5DlD,EAAKmD,kBAGJ,KAAK,GAAI/M,GAAI,EAAGA,EAAI4J,EAAKsC,UAAUrK,OAAQ7B,IACvC4J,EAAKoD,eAAepD,EAAKsC,UAAUlM,GAAIA,EAAG8M,EAAEG,KAIhD,KAAK,GAAIjN,GAAI,EAAGA,EAAI4J,EAAKwC,kBAAkBvK,OAAQ7B,IAC/C4J,EAAKsD,oBAAoBlN,EAAG8M,EAAEG,SAK1ClB,EAAA5K,UAAA4L,iBAAA,WACI,GAAII,GAAUrK,KAAK6J,IAAIC,SACvB9J,MAAK4J,WAAaS,EAAQC,SAE1B,IAAIC,GAAcF,EAAQG,gBAAgBxK,KAAK6J,IAAIY,UAEnDzK,MAAK2J,YACDe,KAAMH,EAAY,GAClBI,KAAMJ,EAAY,GAClBK,KAAML,EAAY,GAClBM,KAAMN,EAAY,KAO1B3M,OAAAC,eAAIoL,EAAA5K,UAAA,abk3BAL,Ial3BJ,WAKI,MAJKgC,MAAK2J,YACN3J,KAAKiK,mBAGFjK,KAAK2J,Ybm3BZ5L,YAAY,EACZD,cAAc,Ia32BlBmL,EAAA5K,UAAA6L,eAAA,SAAeY,EAAsBC,EAAgBC,GAEjD,GAAIhC,EAAalD,gBAAgBgF,IAAQ9B,EAAalD,gBAAgBiF,GAClE,KAAM,6BACC/B,GAAahD,kBAAkB8E,IAAQ9B,EAAalD,gBAAgBiF,GAC3EA,EAAQ/K,KAAKoJ,UAAUtF,QAAQgH,GACxB9B,EAAalD,gBAAgBgF,IAAQ9B,EAAahD,kBAAkB+E,KAC3ED,EAAM9K,KAAKoJ,UAAU2B,IAIS,MAA9B/K,KAAKmJ,eAAe4B,KACpBE,aAAajL,KAAKmJ,eAAe4B,IACjC/K,KAAKmJ,eAAe4B,GAAS,MAIC,MAA9B/K,KAAKkJ,eAAe6B,IAAgD,GAA9B/K,KAAKkJ,eAAe6B,KAC1D/K,KAAKkJ,eAAe6B,GAAO5C,QAC3BnI,KAAKkJ,eAAe6B,GAAS,KAIjC,IAAIG,GAAe,YAEnB,IAAIJ,EAAIK,cAAcnL,KAAK4J,WAAYoB,GAAY,CAC/CF,EAAIM,qBAAqBpL,KAAK2J,WAAY3J,KAAK4J,WAE/C,IAAIyB,GAASrL,IAEbkL,GAAe,WACX,QAAAI,GAAuBC,EAAUC,GAC7B,GAAIC,GAAazL,IACjBA,MAAKkJ,eAAesC,GAAYtM,EAAElB,IAC9BuN,EAAS/J,IACT+J,EAASG,cACT,SAAUlO,GAIN+N,EAASI,gBAAgBnO,GACzB+N,EAASnI,gBACV,QAAQwI,KACX,SAAUC,GACkB,SAApBA,EAAMC,aACNpL,QAAQC,IAAI,UACZD,QAAQC,IAAI4K,EAAS/J,KACrBd,QAAQC,IAAI4K,EAASG,kBAE1B5C,OACH,WACI2C,EAAWtC,eAAeqC,GAAY,KACtCC,EAAWvC,eAAesC,GAAY,OAGlDF,EAAclO,KAAKiO,EAAQP,EAAKC,QAGpCD,GAAIiB,OAER/L,MAAKmJ,eAAe4B,GAASiB,WAAWd,EAAcJ,EAAImB,gBAS9DhD,EAAA5K,UAAA+L,oBAAA,SAAoB8B,EAAalB,EAAoBmB,GAEjD,GAAkB,SAAPD,GAA2C,SAAdC,EACpC,KAAM,qDAOV,IAJmB,gBAARD,KACPA,EAAMlM,KAAKsJ,kBAAkBxF,QAAQ9D,KAAKuJ,wBAAwB4C,KAGlED,EAAM,EAGN,WAFAxL,SAAQC,IAAI,qBAMyB,OAArCX,KAAK0J,wBAAwBwC,KAC7BjB,aAAajL,KAAK0J,wBAAwBwC,IAC1ClM,KAAK0J,wBAAwBwC,GAAO,KAGxC,IAAIE,GAAMpM,KAAKyJ,wBAAwByC,GACnCG,EAAUrM,KAAKsJ,kBAAkB4C,GAEjChE,EAASlI,KAETsM,EAAI,WACQ,OAARF,EACAC,EAAQjP,KAAKgP,EAAKlE,EAAOyB,WAAYzB,EAAO0B,WAAYoB,GAExDqB,EAAQnE,EAAOyB,WAAYzB,EAAO0B,WAAYoB,GAItDhL,MAAK0J,wBAAwBwC,GAAOF,WAAWM,EAAGtM,KAAKwJ,uBAAuB0C,KAQlFjD,EAAA5K,UAAAkO,eAAA,SAAezB,EAAsB0B,GACjC,GADiC,SAAAA,OAAA,GAC7BxM,KAAKoJ,UAAUtF,QAAQgH,IAAO,EAG9B,WAFApK,SAAQC,IAAI,iBAAmBmK,EAAIrN,KAAO,eAI9CuC,MAAKM,aAELN,KAAKkJ,eAAeuD,KAAK,MACzBzM,KAAKmJ,eAAesD,KAAK,MACzBzM,KAAKoJ,UAAUqD,KAAK3B,GACpB9K,KAAKqJ,aAAayB,EAAI9I,IAAM8I,GAE5B0B,EAAsC,iBAAhBA,IAA4BA,KAGtBhK,SAApBxC,KAAK2J,YACL3J,KAAKiK,mBAETjK,KAAKkK,eAAeY,EAAK9K,KAAKoJ,UAAUrK,OAAS,KAazDkK,EAAA5K,UAAAqO,YAAA,SAAYC,EAA+BC,EAAeC,EAAgBL,EAAyBL,GAE/F,GAAInM,KAAKsJ,kBAAkBxF,QAAQ6I,IAAQ,EAEvC,WADAjM,SAAQC,IAAI,0CAGhBX,MAAKM,aACA6L,IACDA,EAAa7K,EAAArC,WAGjBe,KAAKsJ,kBAAkBmD,KAAKE,GAC5B3M,KAAKuJ,wBAAwB4C,GAAcA,EAC3CnM,KAAKwJ,uBAAuBiD,KAAqB,gBAATI,GAAoBA,EAAQ,IACpE7M,KAAKyJ,wBAAwBgD,KAAKzD,EAAahD,kBAAkB4G,GAAWA,EAAU,MACtF5M,KAAK0J,wBAAwB+C,KAAK,OAElCD,EAAsC,iBAAhBA,IAA4BA,KAGtBhK,SAApBxC,KAAK2J,YACL3J,KAAKiK,mBAETjK,KAAKoK,oBAAoBpK,KAAKsJ,kBAAkBvK,OAAS,KAGrEkK,GAlQgCF,EAAA9J,QAAnBjC,GAAAiM,aAoQbpJ,EAAGoJ,WAAaA,EAChBjM,EAAAiC,QAAegK,Gb61BT,SAAUhM,EAAQD,EAASH,GAEjC,YAKA,IAAIoJ,GAAajG,MAAQA,KAAKiG,WAAc,WACxC,GAAIC,GAAgBtI,OAAOuI,iBACpBC,uBAA2BC,QAAS,SAAU7I,EAAG8I,GAAK9I,EAAE4I,UAAYE,IACvE,SAAU9I,EAAG8I,GAAK,IAAK,GAAI/H,KAAK+H,GAAOA,EAAEhI,eAAeC,KAAIf,EAAEe,GAAK+H,EAAE/H,IACzE,OAAO,UAAUf,EAAG8I,GAEhB,QAASC,KAAOvG,KAAKwG,YAAchJ,EADnC0I,EAAc1I,EAAG8I,GAEjB9I,EAAEa,UAAkB,OAANiI,EAAa1I,OAAO6I,OAAOH,IAAMC,EAAGlI,UAAYiI,EAAEjI,UAAW,GAAIkI,OAGvF3I,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,Gc/oCtD,IAAAwL,GAAAlM,EAAA,GAEA+C,EAAA/C,EAAA,GACAsC,EAAAtC,EAAA,GAGAqC,EAAArC,EAAA,GAEMgD,EAAKD,EAAAX,QAAQ,aA0BnB6N,EAAA,WAiBI,QAAAA,GAAYC,EAAqB5F,EAA2C6F,EAAoBC,EAAiCC,GAC7HlN,KAAK+M,QAAUA,EACf/M,KAAKmH,MAAQA,EACbnH,KAAKgN,WAAaA,EAClBhN,KAAKiN,eAAiBA,EACtBjN,KAAKmN,aAAe,GACpBnN,KAAKkN,cAAwC,gBAAjBA,GAA4BA,EAAgB1K,OAUhF,MAPI5E,QAAAC,eAAIiP,EAAAzO,UAAA,ad2mCAL,Ic3mCJ,WACI,MAAiC,gBAAtBgC,MAAKkN,cACLlN,KAAKkN,cAELlN,KAAKmH,MAAM1J,Md+mCtBM,YAAY,EACZD,cAAc,Ic7mCtBgP,IAjCa9P,GAAA8P,wBAuCb,IAAAM,GAAA,SAAAvG,GAgCI,QAAAuG,KAAA,GAAAtG,GACID,EAAAzJ,KAAA4C,KAAM,cAAYA,IdinClB,OchnCA8G,GAAKuG,qBACLvG,EAAKwG,uBACLxG,EAAKyG,mBACLzG,EAAK0G,qBACL1G,EAAK2G,4BACL3G,EAAK4G,iBAAmBlL,OACxBsE,EAAK6G,eAAiBnL,OACtBsE,EAAK8G,cAAgBpL,OACrBsE,EAAK+G,cAAgBrL,OACrBsE,EAAKgH,oBACLhH,EAAKiH,yBACLjH,EAAKkH,sBAILlH,EAAKmH,0BACLnH,EAAKoH,yBAELpH,EAAKqH,YAAa,EAClBrH,EAAKsH,iBAAmB,KAExBtH,EAAKuH,iCAELvH,EAAKwH,oBAAqB,EAC1BxH,EAAKyH,oBAAsB,EdwlCpBzH,EczsBf,MAzciCb,GAAAmH,EAAAvG,GAkE7BuG,EAAA/O,UAAA+B,KAAA,SAAKC,GAAL,GAAAyG,GAAA9G,IACI6G,GAAAxI,UAAM+B,KAAIhD,KAAA4C,KAACK,EAEX,IAAImO,GACAC,EAASzO,KAAK6J,IAAI6E,WAGlBF,GAAOtP,EADU,gBAAVuP,GACE,IAAMA,EAGNA,GAGbD,EAAKzK,OACD,uGAMJ/D,KAAK0N,iBAAmBc,EAAKrK,KAAK,aAClCnE,KAAK2N,eAAiBa,EAAKrK,KAAK,kBAChCnE,KAAK4N,cAAgBY,EAAKrK,KAAK,mBAE/B,IAAIwK,GAAQ,SAAC1Q,GACT,MAAOkB,GAAGyP,OAAOC,SAAS5Q,GAgJ9B,OA5IA+B,MAAK6N,cAAgB,GAAI1O,GAAG2P,SACxBC,QAAS/O,KAAK0N,iBAAiB,GAC/BsB,SAAS,EACTC,kBACIC,SAAU,IACVpK,OAAQzE,EAAOyJ,UAAUqF,YACzBP,OAAQD,KAIhB3O,KAAKC,KAAKmP,WAAWpP,KAAK6N,eAE1B7N,KAAK4N,cAAcxJ,MAAM,SAACiL,GACtBvI,EAAKwI,eAITtP,KAAKC,KAAK8J,GAAG,cAAe,SAACsF,GAMzB,GAJAvI,EAAKwI,aACLxI,EAAKsH,iBAAmBiB,EAAgB,WAGpCvI,EAAKoH,sBAAsBnP,OAAS,EAcpC,IAAc,GAZVkJ,IACAsH,SAAUF,EAAgB,WAAEnI,KAAK,KACjCsI,aAAc,oBACdvI,OAAQ,MACRwI,GAAI3I,EAAK7G,KAAK6J,UAAU4F,gBAAgBC,UAAU9Q,MAAM,KAAK,GAC7D+Q,UAAY9I,EAAK7G,KAAK6J,UAAUU,gBAAgB1D,EAAK7G,KAAKwK,WAAwBvD,KAAK,KACvF2I,aAAe/I,EAAK7G,KAAKwK,UAAuBvD,KAAK,KAAO,MAC5D4I,gBAAgB,EAChBC,UAAW,GACXzD,EAAG,SAGOlE,EAAA,EAAAC,EAAAvB,EAAKoH,sBAAL9F,EAAAC,EAAAtJ,OAAAqJ,IAA0B,CAAnC,GAAIjL,GAACkL,EAAAD,EACNjL,GAAE6K,aAAaC,GAIvB,GAAI+H,GAA0BlJ,EAAKmJ,iBAAiBZ,EAAW,MAE/DvI,GAAKuH,iCACLvH,EAAKwH,oBAAqB,CAE1B,KAAK,GAAIpR,GAAI,EAAGA,EAAI8S,EAAwBjR,OAAQ7B,IAAK,CACrD,GAAIgT,GAAUF,EAAwB9S,GAElCiT,EAAQD,EAAQnD,QAAQqD,gBAExBC,EAAuBvJ,EAAK2G,yBAAyByC,EAAQlD,YAAYmD,EAAOrJ,EAAK6G,eAGrF0C,MAAyB,IAEa,gBAAxBA,IACdH,EAAQ/C,aAAekD,EACvBvJ,EAAKuH,8BAA8B5B,KAAKyD,IAExCA,EAAQjD,eAAevH,YAAY4K,WAAWJ,EAAQnD,UAI9DjG,EAAKyH,oBAAsBzH,EAAKuH,8BAA8BtP,OAE9D+H,EAAKwH,oBAAqB,CAE1B,IAAIhG,GAAY,4BAChBA,IAAa,iEACbA,GAAa,6DACbA,GAAa,6EACbA,GAAa,8BACbA,GAAa,iEAAiExB,EAAKyH,oBAAmB,UACtGjG,GAAa,yCACbA,GAAa,iDACbA,GAAa,SACbA,GAAa,+BAEbA,GAAa,SAEbxB,EAAK6G,eAAejJ,KAAK4D,GAEzBxB,EAAK6G,eAAexJ,KAAK,mBAAmBC,MAAM,WACd,GAA5B0C,EAAKyH,sBAIsB,GAA3BzH,EAAKwH,mBACLxH,EAAKwH,mBAAqBxH,EAAKyH,oBAAsB,EAErDzH,EAAKwH,qBAETxH,EAAKyJ,uBAGT,IAAIC,GAAY1J,EAAK6G,eAAexJ,KAAK,cAEzCqM,GAAUpM,MAAM,WACoB,GAA5B0C,EAAKyH,qBAA4BzH,EAAKwH,oBAAqB,IAI3DxH,EAAKwH,oBAAsBxH,EAAKyH,oBAAsB,EACtDzH,EAAKwH,mBAAqB,EAE1BxH,EAAKwH,qBAETxH,EAAKyJ,wBAILzJ,EAAKyH,oBAAsB,IAC3BiC,EAAU5L,QAAQ,SAClBkC,EAAK+G,cAAc4C,YAAY3J,EAAKsH,kBACpCtH,EAAK6G,eAAe+C,UAAU,GAC9B5J,EAAKqH,YAAa,KAK1BnO,KAAKC,KAAK8J,GAAG,cAAe,SAACsF,GACzB,IAAIA,EAAc,SAAlB,CAGA,GAAIsB,GAAQ7J,EAAK+C,IAAI+G,cAAcvB,EAAmB,eAClDwB,EAAM/J,EAAK+C,IAAIiH,kBAAkBH,EAAO,SAACI,GACzC,IAAoB,GAAA3I,GAAA,EAAAC,EAAAvB,EAAK0G,kBAALpF,EAAAC,EAAAtJ,OAAAqJ,IAAsB,CACtC,GAAI2I,GADQ1I,EAAAD,GAER,OAAO,EAIf,OAAO,GAEMtB,GAAK+C,IAAImH,mBACfC,MAAMC,OAASL,EAAM,UAAY,OAGzC,GAOXzD,EAAA/O,UAAAkS,mBAAA,WACI,GAAIY,GAA0BnR,KAAK2N,eAAexJ,KAAK,8BACnDiN,EAAcpR,KAAK2N,eAAexJ,KAAK,mBACvCkN,EAAiBrR,KAAK2N,eAAexJ,KAAK,4BAC9CnE,MAAKsR,gBACL,IAAIC,GAAavR,KAAKqO,8BAA8BrO,KAAKsO,mBACzD6C,GAAwBzM,MAAM1E,KAAKsO,mBAAqB,GAAGkD,WAC3DH,EAAe3M,KAAK6M,EAAWE,WAC/BL,EAAY1M,KAAK6M,EAAWpE,cAC5BoE,EAAWtE,eAAevH,YAAY4K,WAAWiB,EAAWxE,QAC5D,KAAc,GAAA3E,GAAA,EAAAC,EAAArI,KAAKiO,uBAAL7F,EAAAC,EAAAtJ,OAAAqJ,IAA2B,EACrCkE,EADMjE,EAAAD,IACJpI,KAAK2N,kBAYfP,EAAA/O,UAAAuK,0BAAA,SAA0BmE,EAAqBjC,EAAyBqC,EAAsBuE,GAE1F,GAAIC,GAAkB,GAAI7E,GACtBC,EAASjC,EAAK9K,KAAKuO,oBAAqBvO,KAAK+N,sBAAsBjD,EAAI9I,IAAK0P,EAEhFC,GAAgBxE,aAAeA,EAE/BnN,KAAKqO,8BAA8B5B,KAAKkF,GACxC3R,KAAKuO,sBAELrP,EAAE,yBAAyBwF,KAAK1E,KAAKuO,oBAAoBiD,WAEpDxR,KAAKmO,aACNnO,KAAK2N,eAAexJ,KAAK,eAAeS,QAAQ,SAEhD5E,KAAK6N,cAAc4C,YAAYzQ,KAAKoO,kBACpCpO,KAAK2N,eAAe+C,UAAU,GAC9B1Q,KAAKmO,YAAa,IAU1Bf,EAAA/O,UAAA4R,iBAAA,SAAiBU,GAAjB,GAAA7J,GAAA9G,KACQgQ,IAYJ,OAVAhQ,MAAK6J,IAAI+H,sBAAsBjB,EAAO,SAAC5D,EAAqB5F,GACxD,GAAI0K,GAAW/K,EAAK0G,kBAAkB1J,QAAQqD,EAE1C0K,IAAW,GACX7B,EAAwBvD,KACpB,GAAIK,GACAC,EAASjG,EAAKyG,gBAAgBsE,GAAWA,EAAU/K,EAAKgH,iBAAiB+D,OAIlF7B,GAGX5C,EAAA/O,UAAAiR,WAAA,WAQI,MAPAtP,MAAKM,aACLN,KAAKmO,YAAa,EAClBnO,KAAK6N,cAAc4C,YAAYjO,QAC/BxC,KAAK4N,cAAc,GAAGkE,OACtB9R,KAAKsR,iBACLtR,KAAK2N,eAAejJ,KAAK,KAElB,GAQX0I,EAAA/O,UAAA0T,wBAAA,SAAwBC,GACpBhS,KAAKiO,uBAAuBxB,KAAKuF,IAarC5E,EAAA/O,UAAA4T,eAAA,SAAenH,EAAsBoH,GACjClS,KAAKM,aAEL4R,EAAiBA,MACjBA,EAAeC,MAAQD,EAAeC,OAAS,sBAC/CD,EAAeE,MAAQF,EAAeE,OAAS,EAE/C,IAAIC,EAGAA,GADAH,EAAeI,QACJJ,EAAeI,QAEf,GAAInT,GAAG8R,MAAMsB,OACpBC,OAAQ,GAAIrT,GAAG8R,MAAMwB,QACjBN,MAAOD,EAAeC,MACtBC,MAAOF,EAAeE,QAE1BM,MAAO,GAAIvT,GAAG8R,MAAM0B,QAChBC,OAAQ,EACRC,KAAM,GAAI1T,GAAG8R,MAAM6B,MAAMX,MAAOD,EAAeC,QAC/CK,OAAQ,GAAIrT,GAAG8R,MAAMwB,QAAQN,MAAOD,EAAeC,MAAOC,MAAO,MAErES,KAAM,GAAI1T,GAAG8R,MAAM6B,MACfX,MAAOD,EAAeC,SAKlC,IAAIlF,GAAiB,GAAI9N,GAAGgI,MAAM4L,QAE1BjO,OAAQ,GAAI3F,GAAG2F,OAAOiO,OACtB9B,MAAOoB,GAUf,OANApF,GAAerH,UAAU,KAEzB5F,KAAK8N,iBAAiBrB,KAAKQ,GAC3BjN,KAAK+N,sBAAsBjD,EAAI9I,IAAMiL,EACrCjN,KAAK6J,IAAImJ,SAAS/F,GAEXA,GAcXG,EAAA/O,UAAA4U,eAAA,SAAenI,EAAsBoI,EACtBhB,GACX,GAAIjF,GAAiBjN,KAAKiS,eAAenH,EAAKoH,EAO9C,OANAlS,MAAKqN,kBAAkBZ,KAAK3B,EAAI9I,IAChChC,KAAKsN,oBAAoBb,KAAK3B,EAAIrN,MAClCuC,KAAKuN,gBAAgBd,KAAK3B,GAC1B9K,KAAKwN,kBAAkBf,KAAK3B,EAAIvF,SAChCvF,KAAKyN,yBAAyBhB,KAAKyG,GAE5BjG,GAQXG,EAAA/O,UAAA8U,kBAAA,SAAkBrI,GACd,GAAIsI,GAAMpT,KAAKqN,kBAAkBvJ,QAAQgH,EAAI9I,GAEzCoR,IAAM,IACNpT,KAAKqN,kBAAkBgG,OAAOD,EAAK,GACnCpT,KAAKsN,oBAAoB+F,OAAOD,EAAK,GACrCpT,KAAKuN,gBAAgB8F,OAAOD,EAAK,GACjCpT,KAAKwN,kBAAkB6F,OAAOD,EAAK,GACnCpT,KAAKyN,yBAAyB4F,OAAOD,EAAK,GAC1CpT,KAAK8N,iBAAiBuF,OAAOD,EAAK,SAC3BpT,MAAK+N,sBAAsBjD,EAAI9I,MAa9CoL,EAAA/O,UAAAuJ,mBAAA,SAAmBkD,EAAKoH,GACpB,GAAIjF,GAAiBjN,KAAKiS,eAAenH,EAAKoH,EAG9C,OAFAlS,MAAKkO,sBAAsBzB,KAAK3B,GAEzBmC,GAGXG,EAAA/O,UAAAiT,eAAA,WACItR,KAAKM,YACL,KAAK,GAAIpD,GAAI,EAAGA,EAAI8C,KAAK8N,iBAAiB/O,OAAQ7B,IAC9C8C,KAAK8N,iBAAiB5Q,GAAGwI,YAAYqG,OAEzC,KAAc,GAAA3D,GAAA,EAAAC,EAAArI,KAAKgO,mBAAL5F,EAAAC,EAAAtJ,OAAAqJ,IAAuB,EACjCkE,EADMjE,EAAAD,QASdgF,EAAA/O,UAAAiV,oBAAA,SAAoB3G,GAChB3M,KAAKgO,mBAAmBvB,KAAKE,IAErCS,GAzciCrE,EAAA9J,QAApBjC,GAAAoQ,cA0cbvN,EAAGuN,YAAcA,EACjBpQ,EAAAiC,QAAemO,Gd6hCT,SAAUnQ,EAAQD,EAASH,GAEjC,YephDA,SAAAqE,GAA6BF,GACzBA,EAAUA,MACVA,EAAQuS,MAAQvS,EAAQuS,OAAS,MACjCvS,EAAQwS,OAASxS,EAAQwS,SAAWC,GAAG,SAAWC,EAAG,SACrD1S,EAAQ2S,KAA8B,gBAAhB3S,GAAQ2S,KAAmB3S,EAAQ2S,KAAO,EAChE3S,EAAQ4S,aAA8C,iBAAxB5S,GAAQ4S,cAA4B5S,EAAQ4S,aAC1E5S,EAAQ6S,WAA0C,iBAAtB7S,GAAQ6S,YAA0B7S,EAAQ6S,WAGxD3U,EAAE,IAAM8B,EAAQuS,OACtBO,IAAI,WAAY,WAExB,IAAIC,GAAW,GAAI5U,GAAGgI,MAAMC,MAAMtC,OAAQ,GAAI3F,GAAG2F,OAAOkP,KA0BxD,IApBIhT,EAAQ4S,aAoBR5S,EAAQ2S,KAAO,GAAK3S,EAAQ2S,KAAO,GACnC,KAAM,mBAGV,IAAI3S,EAAQwS,OAAOC,IAAK,KAAQzS,EAAQwS,OAAOC,GAAK,KAAOzS,EAAQwS,OAAOE,IAAK,IAAO1S,EAAQwS,OAAOE,GAAK,GAAI,CAC1G,GAAInV,GAAI,GAAIY,GAAG8U,KAAKC,OAAOlT,EAAQwS,OAAOC,EAAGzS,EAAQwS,OAAOE,GAC5D,IAAIvU,GAAGgV,KAAKC,YAAYC,KAAM,cAE9B9V,EAAE+V,UAAU,GAAInV,GAAGgV,KAAKC,YAAYC,KAAM,cAAe,GAAIlV,GAAGgV,KAAKC,YAAYC,KAAM,cACvF,IAAIE,GAAchW,EAAEiW,gBACpBxT,GAAQwS,OAAOC,EAAIc,EAAY,GAC/BvT,EAAQwS,OAAOE,EAAIa,EAAY,GAGnC,GAAME,GAAWtV,EAAGuV,QAAQC,UACpBC,oBAAqBC,aAAa,KAIpCC,EAAO,GAAI3V,GAAG4V,MAChBvB,QAASxS,EAAQwS,OAAOC,EAAGzS,EAAQwS,OAAOE,GAC1CC,KAAM3S,EAAQ2S,KACd9Q,QAAS7B,EAAQ6B,QACjBE,QAAS/B,EAAQ+B,UAGjB8G,EAAM,GAAI1K,GAAG6V,KACb/N,QAAS8M,GACTtF,OAAQzN,EAAQuS,MAChBkB,SAAUA,EACVK,KAAMA,GAOV,OAJI9T,GAAQ6S,YACRhK,EAAIoL,WAAW,GAAI9V,GAAGuV,QAAQQ,gBAG3BrL,Ef88CXjM,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,GexjDtD,IAAAqC,GAAA/C,EAAA,GACAsC,EAAAtC,EAAA,GACAqC,EAAArC,EAAA,GACMgD,EAAKD,EAAAX,QAAQ,YA4BnBjC,GAAAkE,eA8EArB,EAAGqB,aAAeA,EAClBlE,EAAAiC,QAAeiC,GfqiDT,SAAUjE,EAAQD,EAASH,GAEjC,YgB7mDA,SAAA+F,GAAiCuS,GAG7B,MAAwB,gBAAbA,GACHA,EAAY,GAAM,GAAKA,GAAa,GAAKA,GAAa,GAC/CC,EAAeD,OAEtBzU,SAAQC,IAAI,gCAAgCwU,GAKhD,OAWR,QAAAE,GAAiCC,GAC7B,IAAK,GAAIpY,GAAI,EAAGA,EAAIkY,EAAerW,OAAQ7B,IACvC,GAAIoY,GAAcF,EAAelY,GAC7B,MAAOA,EAIf,OAAO,GhBolDXU,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,GgB1pDtD,IAAAqC,GAAA/C,EAAA,GACMgD,EAAKD,EAAAX,QAAQ,mCAEfmW,GACA,mBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,iBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,qBACA,qBAQJpY,GAAA4F,mBAeA/C,EAAG+C,iBAAmBA,EAQtB5F,EAAAqY,mBAUAxV,EAAGwV,iBAAmBA,GhB2pDd,CAEF,SAAUpY,EAAQD,EAASH,GAEjC,YiBvtDA,SAAA0Y,GAA2BC,EAAYpT,GAGnC,MAAO,QAAQoT,EAAW,GAAE,IAAIA,EAAW,GAAE,IAAIA,EAAW,GAAE,IAAIpT,EAAO,IAQ7E,QAAAqT,GAAoBC,GAChB,MAAOC,QAAOD,GACTrW,QAAQ,KAAM,SACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QA4RvB,QAAAuW,GAAkDC,GAE9C,GAAIC,GAAWD,EAAaE,YAAYD,SACpCE,EAAmC,IAEvC,QAAQF,EAAS3L,MACb,IAAK,SACD,OAAQ0L,EAAarG,cACjB,IAAK,oBACDwG,EAAkB,GAAIC,GAAaJ,EAAcK,EACjD,MACJ,KAAK,uBACDF,EAAkB,GAAIC,GAAaJ,EAAcM,EACjD,MACJ,KAAK,sBACDH,EAAkB,GAAIC,GAAaJ,EAAcO,EACjD,MACJ,SACI1V,QAAQC,IAAIkV,GACZpV,MAAMoV,EAAarG,aAAe,gBAE1C,KACJ,KAAK,cACD,OAAQqG,EAAarG,cACjB,IAAK,oBACDwG,EAAkB,GAAIK,GAAkBR,EAAcK,EACtD,MACJ,KAAK,uBACDF,EAAkB,GAAIK,GAAkBR,EAAcM,EACtD,MACJ,KAAK,sBACDH,EAAkB,GAAIK,GAAkBR,EAAcO,EACtD,MACJ,SACI1V,QAAQC,IAAIkV,GACZpV,MAAMoV,EAA2B,aAAI,gBAE7C,KACJ,SACIpV,MAAM,8BAAgCqV,EAAe,MAG7D,MAAuB,OAAnBE,GACQ/E,MAAOzO,OAAW8T,OAAQ,KAE1BrF,MAAO+E,EAAgB1D,QAASgE,OAAQN,EAAgBO,YAaxE,QAAAC,GAA8BC,EAAWC,GAAA,SAAAA,OAAA,GAGrCA,EAA8D,iBAA5BA,IAAwCA,CAC1E,IAAIjF,GAAYgF,EAAqB,UACjCE,EAAcF,EAAkB,OAChCF,EAAa,EAMjB,IAJKG,IACDH,GAAc,sCAAsC9E,EAAS,WAGvC,GAAtBkF,EAAY5X,OACZwX,EAAa,yEAAyEI,EAAY,GAAc,UAAC,SAC9G,CACED,IACDH,GAAc,8EAElBA,GAAc,MACd,KAAK,GAAIrZ,GAAI,EAAGA,EAAIyZ,EAAY5X,OAAQ7B,IACpCqZ,GAAc,OACdA,GAAc,sCAAsCd,EAAWkB,EAAYzZ,GAAU,OAAE,UACvFqZ,GAAc,yEAAyEI,EAAYzZ,GAAc,UAAC,KAClHqZ,GAAc,OAElBA,IAAc,QAOlB,MAJKG,KACDH,EAAa,sCAAsC9E,EAAS,UAAY8E,GAGrEA,EAQX,QAAAxO,GAAqC8N,GAGjC,GAAIe,GAAgB,GAEhB3P,EAAS4O,EAAqB,MAElC,IAAqB,GAAjB5O,EAAOlI,OACP6X,GAAiBJ,EAAqBvP,EAAO,IAAI,OAC9C,CACH2P,GAAiB,MACjB,KAAK,GAAI1Z,GAAI,EAAGA,EAAI+J,EAAOlI,OAAQ7B,IAC/B0Z,GAAiB,OAASJ,EAAqBvP,EAAO/J,IAAM,OAEhE0Z,IAAiB,QAGrB,MAAOA,GjByzCX,GAAI3Q,GAAajG,MAAQA,KAAKiG,WAAc,WACxC,GAAIC,GAAgBtI,OAAOuI,iBACpBC,uBAA2BC,QAAS,SAAU7I,EAAG8I,GAAK9I,EAAE4I,UAAYE,IACvE,SAAU9I,EAAG8I,GAAK,IAAK,GAAI/H,KAAK+H,GAAOA,EAAEhI,eAAeC,KAAIf,EAAEe,GAAK+H,EAAE/H,IACzE,OAAO,UAAUf,EAAG8I,GAEhB,QAASC,KAAOvG,KAAKwG,YAAchJ,EADnC0I,EAAc1I,EAAG8I,GAEjB9I,EAAEa,UAAkB,OAANiI,EAAa1I,OAAO6I,OAAOH,IAAMC,EAAGlI,UAAYiI,EAAEjI,UAAW,GAAIkI,OAGvF3I,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GiBrvDtD,IAAAqC,GAAA/C,EAAA,GACAsC,EAAAtC,EAAA,GACMgD,EAAKD,EAAAX,QAAQ,0BAoCnBY,GAAG4V,WAAaA,CA4BhB,IAAAoB,GAAA,WAWI,QAAAA,GAAYC,EAAuB1U,GAC/BpC,KAAK8W,UAAYA,EACjB9W,KAAKoC,QAAUA,EACfpC,KAAKsS,QAAU9P,OACfxC,KAAKuW,WAAa,GAE1B,MAAAM,MAOAX,EAAA,SAAArP,GACI,QAAAqP,GAAYY,EAAuB1U,GAAnC,GAAA0E,GACID,EAAAzJ,KAAA4C,KAAM8W,EAAW1U,IAAQpC,IACzB,QAAQ8G,EAAKgQ,UAAU3M,MACnB,IAAK,UACD,GAAI4M,GAAaxB,EAAkBzO,EAAKgQ,UAAU3E,MAAOrL,EAAK1E,SAC1D4U,EAAazB,EAAkBzO,EAAKgQ,UAAUG,QAAQ9E,MAAOrL,EAAK1E,SAClE8U,EAAepQ,EAAKgQ,UAAUG,QAAQ7E,MACtCQ,EAAS9L,EAAKgQ,UAAUK,IAG5BrQ,GAAKwL,QAAU,GAAInT,GAAG8R,MAAMsB,OACxBG,MAAO,GAAIvT,GAAG8R,MAAM0B,QAChBC,OAAQA,EACRC,KAAM,GAAI1T,GAAG8R,MAAM6B,MACfX,MAAO4E,IAEXvE,OAAQ,GAAIrT,GAAG8R,MAAMwB,QAAQN,MAAO6E,EAAY5E,MAAO8E,QAG/DpQ,EAAKyP,WAAa,iDAAiDQ,EAAU,kBAC7E,MACJ,KAAK,UACDjQ,EAAKwL,QAAU,GAAInT,GAAG8R,MAAMsB,OACxBG,MAAO,GAAIvT,GAAG8R,MAAMmG,MAAMC,IAAK,yBAAyBvQ,EAAKgQ,UAAqB,cAEtFhQ,EAAKyP,WAAa,yEAAyEzP,EAAKgQ,UAAqB,UAAC,IACtH,MACJ,SACIpW,QAAQC,IAAImG,EAAKgQ,WACjBrW,MAAM,6CAA+CqG,EAAKgQ,UAAgB,MjBgtDlF,MAAOhQ,GiB7sDf,MAjC0Bb,GAAAiQ,EAAArP,GAiC1BqP,GAjC0BW,GAmC1BV,EAAA,SAAAtP,GACI,QAAAsP,GAAYW,EAAuB1U,GAAnC,GAAA0E,GACID,EAAAzJ,KAAA4C,KAAM8W,EAAW1U,IAAQpC,IACzB,QAAQ8G,EAAKgQ,UAAU3M,MACnB,IAAK,UACD,GAAI4M,GAAaxB,EAAkBzO,EAAKgQ,UAAU3E,MAAOrL,EAAK1E,SAC1DkV,EAAYxQ,EAAKgQ,UAAU1E,KAE/BtL,GAAKwL,QAAU,GAAInT,GAAG8R,MAAMsB,OACxBC,OAAQ,GAAIrT,GAAG8R,MAAMwB,QACjBN,MAAO4E,EAEP3E,MAAOkF,MAIfxQ,EAAKyP,WAAa,mCAClBzP,EAAKyP,YAAc,UACnBzP,EAAKyP,YAAc,qBAAqBQ,EAAU,IAClDjQ,EAAKyP,YAAc,eACnBzP,EAAKyP,YAAc,eACnBzP,EAAKyP,YAAc,sBACnBzP,EAAKyP,YAAc,yBACnBzP,EAAKyP,YAAc,aACnBzP,EAAKyP,YAAc,WACnB,MACJ,SACI7V,QAAQC,IAAImG,EAAKgQ,WACjBrW,MAAM,4CAA8CqG,EAAKgQ,UAAgB,MjBgtDjF,MAAOhQ,GiB7sDf,MA/ByBb,GAAAkQ,EAAAtP,GA+BzBsP,GA/ByBU,GAiCzBT,EAAA,SAAAvP,GACI,QAAAuP,GAAYU,EAAuB1U,GAAnC,GAAA0E,GACID,EAAAzJ,KAAA4C,KAAM8W,EAAW1U,IAAQpC,IACzB,QAAQ8G,EAAKgQ,UAAgB,MACzB,IAAK,UACD,GAAIC,GAAaxB,EAAkBzO,EAAKgQ,UAAU3E,MAAOrL,EAAK1E,SAC1D4U,EAAazB,EAAkBzO,EAAKgQ,UAAUG,QAAQ9E,MAAOrL,EAAK1E,SAClE8U,EAAepQ,EAAKgQ,UAAUG,QAAQ7E,KAE1CtL,GAAKwL,QAAU,GAAInT,GAAG8R,MAAMsB,OACxBC,OAAQ,GAAIrT,GAAG8R,MAAMwB,QACjBN,MAAO6E,EAEP5E,MAAO8E,IAEXrE,KAAM,GAAI1T,GAAG8R,MAAM6B,MACfX,MAAO4E,MAIfjQ,EAAKyP,WAAa,mCAClBzP,EAAKyP,YAAc,UACnBzP,EAAKyP,YAAc,qBAAqBQ,EAAU,IAClDjQ,EAAKyP,YAAc,iBAAiBS,EAAU,QAC9ClQ,EAAKyP,YAAc,eACnBzP,EAAKyP,YAAc,eACnBzP,EAAKyP,YAAc,sBACnBzP,EAAKyP,YAAc,yBACnBzP,EAAKyP,YAAc,YACnBzP,EAAKyP,YAAc,WACnB,MAEJ,SACI7V,QAAQC,IAAImG,EAAKgQ,WACjBrW,MAAM,2CAA6CqG,EAAKgQ,UAAgB,MjB+sDhF,MAAOhQ,GiB5sDf,MArC4Bb,GAAAmQ,EAAAvP,GAqC5BuP,GArC4BS,GAuC5BU,EAAA,WAMI,QAAAA,GAAY1B,GACR7V,KAAKoC,SAAW,KAAOyT,EAA0B,YAAgB,cAAK,IAAM,IAC5E7V,KAAK8V,SAAWD,EAAaE,YAAYD,SACzC9V,KAAKsS,QAAU9P,OACfxC,KAAKuW,WAAa,GAE1B,MAAAgB,MAEAtB,EAAA,SAAApP,GAOI,QAAAoP,GAAYJ,EAAc2B,GAA1B,GAAA1Q,GACID,EAAAzJ,KAAA4C,KAAM6V,IAAa7V,IACnB8G,GAAK2Q,OAAS3Q,EAAKgP,SAAS2B,MAC5B,IAAIX,GAAY,GAAIU,GAAY1Q,EAAK2Q,OAAQ3Q,EAAK1E,QjB4sDlD,OiB3sDA0E,GAAKwL,QAAUwE,EAAUxE,QACzBxL,EAAKyP,WAAaO,EAAUP,WjB0sDrBzP,EiBxsDf,MAd2Bb,GAAAgQ,EAAApP,GAc3BoP,GAd2BsB,GAgB3BlB,EAAA,SAAAxP,GAiBI,QAAAwP,GAAYR,EAA4B2B,GAAxC,GAAA1Q,GACID,EAAAzJ,KAAA4C,KAAM6V,IAAa7V,IAMnB,IALA8G,EAAK4Q,iBAAmB5Q,EAAKgP,SAA2B,iBACxDhP,EAAK6Q,aAAe7Q,EAAKgP,SAAiB,OAC1ChP,EAAK8Q,cAAgB9Q,EAAKgP,SAAwB,cAG9ChP,EAAK8Q,cAAe,CACpB,GAAId,GAAY,GAAIU,GAAY1Q,EAAK8Q,cAAe9Q,EAAK1E,QACzD0E,GAAK+Q,aAAef,EAAUxE,QAC9BxL,EAAKgR,iBAAmB,sCAAsCrC,EAAW3O,EAAKgP,SAAuB,cAAE,UAAYgB,EAAUP,eAE7HzP,GAAK+Q,aAAerV,OACpBsE,EAAKgR,iBAAmB,OAG5BhR,GAAKiR,cACLjR,EAAKkR,cACLlR,EAAKmR,eACLnR,EAAKoR,sBAEL,KAAsB,GAAA9P,GAAA,EAAAC,EAAAvB,EAAK4Q,iBAALtP,EAAAC,EAAAtJ,OAAAqJ,IAAqB,CAAtC,GAAI+P,GAAS9P,EAAAD,EACdtB,GAAKkR,WAAWvL,KAAK0L,EAAiB,OACtCrR,EAAKiR,WAAWtL,KAAK0L,EAAiB,MACtC,IAAIC,GAAY,GAAIZ,GAAYW,EAAUV,OAAQ3Q,EAAK1E,QACvD0E,GAAKmR,YAAYxL,KAAK,sCAAsCgJ,EAAW0C,EAAiB,OAAE,UAAYC,EAAU7B,YAChHzP,EAAKoR,oBAAoBC,EAAiB,OAAKC,EAAU9F,QAI7DxL,EAAKwL,QAAU,SAACvF,GACZ,GAAIsL,GAAkBtL,EAAQqD,gBAC1BkI,EAAgBD,EAAgBvR,EAAK6Q,aASzC,OANgDnV,UAA5CsE,EAAKoR,oBAAoBI,IACVxR,EAAKoR,oBAAoBI,KAE1BxR,EAAK+Q,eAMG,OAA1B/Q,EAAKgR,kBACLhR,EAAKmR,YAAYxL,KAAK3F,EAAKgR,kBAG/BhR,EAAKyP,WAAa,MAClB,KAAc,GAAAgC,GAAA,EAAAC,EAAA1R,EAAKmR,YAALM,EAAAC,EAAAzZ,OAAAwZ,IAAgB,CAAzB,GAAIE,GAACD,EAAAD,EACNzR,GAAKyP,YAAc,OAAOkC,EAAC,QjB6rD/B,MiB3rDA3R,GAAKyP,YAAc,QjB2rDZzP,EiBzrDf,MAvEgCb,GAAAoQ,EAAAxP,GAuEhCwP,GAvEgCkB,EA4FhCva,GAAA4Y,oCAiDA/V,EAAG+V,kCAAoCA,EAiDvC5Y,EAAA+K,uBAoBAlI,EAAGkI,qBAAuBA,GjB4qDlB,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEF,SAAU9K,EAAQD,EAASH,GAEjC,YAKAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GkBjnEtD,IAAAqC,GAAA/C,EAAA,GAGAqC,EAAArC,EAAA,GAEIgD,EAAKD,EAAAX,QAAQ,0BAGjByZ,EAAA,WAcI,QAAAA,GAAY7O,EAAa8O,GAAA,SAAAA,MAAA,GAAzB,IAAA7R,GAAA9G,IAEI2Y,GAAgBA,GAAiB,GAKjC3Y,KAAK4Y,cAML5Y,KAAK6Y,eAEL7Y,KAAK8Y,cAAgB,GACrB9Y,KAAK+Y,OAAS,KAEd/Y,KAAKC,KAAO4J,EACZ7J,KAAKgZ,YAAc9Z,EAAE2K,EAAImH,oBACzBhR,KAAKgZ,YAAYjV,OAAO,6BAA6B4U,EAAa,UAGlE3Y,KAAKiZ,QAAUjZ,KAAKgZ,YAAY7U,KAAK,iBACrCnE,KAAKkZ,aAAelZ,KAAKkZ,aAEzBlZ,KAAKmZ,UAAW,EAEhBnZ,KAAKgZ,YAAYI,WAAW,WACxBtS,EAAKqS,UAAW,IAGpBnZ,KAAKiZ,QAAQI,KAAK,4BAA6B,SAAShK,GACpDA,EAAIiK,mBAGRtZ,KAAKiZ,QAAQM,UAAU,SAAClK,GACpBvI,EAAKqS,UAAW,EAChBrS,EAAKiS,OAAS1J,EAAImK,UAGtBta,EAAEP,QAAQ8a,QAAQ,WACd3S,EAAKqS,UAAW,IAGpBnZ,KAAKgZ,YAAYU,UAAU,SAACrK,GACxB,GAAIvI,EAAKqS,SAAU,CACf,GAAIQ,GAAU7S,EAAKkS,YAAYY,WAAWC,KACtCC,EAAWhT,EAAKkS,YAAY5G,OAEhCtL,GAAKoS,aAAe,KAAO7J,EAAI0K,MAAQjT,EAAKiS,OAASY,GAAWG,KA+EhF,MAtEIpB,GAAAra,UAAA2b,aAAA,SAAalP,GAAb,GAAAhE,GAAA9G,IAEQA,MAAK4Y,WAAW9U,QAAQgH,KAAQ,IAIpCA,EAAIvF,QAAQwE,GAAG,aAAc,SAACkQ,GAC1B,GAAI7N,GAAM6N,EAAe,QACrB7H,EAAQhG,EAAI8N,OAAO9H,OAAStL,EAAKoS,aAAe,IAEpD9M,GAAI+N,OACJ/N,EAAIgO,YACJhO,EAAIiO,KAAK,EAAG,EAAGjI,EAAOhG,EAAI8N,OAAOI,QACjClO,EAAImO,SAGRzP,EAAIvF,QAAQwE,GAAG,cAAe,SAAUkQ,GAC1BA,EAAe,QACrBO,YAIRxa,KAAK4Y,WAAWnM,KAAK3B,KAOzB4N,EAAAra,UAAAoc,cAAA,SAAc3P,GAAd,GAAAhE,GAAA9G,IAEQA,MAAK6Y,YAAY/U,QAAQgH,KAAQ,IAIrCA,EAAIvF,QAAQwE,GAAG,aAAc,SAACkQ,GAC1B,GAAI7N,GAAM6N,EAAe,QACrB7H,EAAQhG,EAAI8N,OAAO9H,OAAStL,EAAKoS,aAAe,IAEpD9M,GAAI+N,OACJ/N,EAAIgO,YACJhO,EAAIiO,KAAKjI,EAAO,EAAGhG,EAAI8N,OAAO9H,MAAQA,EAAOhG,EAAI8N,OAAOI,QACxDlO,EAAImO,SAGRzP,EAAIvF,QAAQwE,GAAG,cAAe,SAAUkQ,GAC1BA,EAAe,QACrBO,YAGRxa,KAAK6Y,YAAYpM,KAAK3B,KAG1BlN,OAAAC,eAAI6a,EAAAra,UAAA,gBlB+kEAL,IkB/kEJ,WACI,MAAOgC,MAAK8Y,elBilEZ9T,IkB9kEJ,SAAiB0V,GACb,GAAIC,GAAQ3a,KAAKiZ,QAAQW,WAAWC,KAAO7Z,KAAKiZ,QAAQ7G,QAAUpS,KAAKgZ,YAAY5G,OAE/EsI,GAAU,GAEHC,GAASD,EAAU1a,KAAKkZ,eAInClZ,KAAK8Y,cAAgB4B,EACrB1a,KAAKiZ,QAAQnF,IAAI,OAAW9T,KAAK8Y,cAActH,QAAQ,GAAE,KACzDxR,KAAKC,KAAK2a,WlB+kEV7c,YAAY,EACZD,cAAc,IkB9kEtB4a,IAEA7Y,GAAG6Y,WAAaA,EAChB1b,EAAAiC,QAAeyZ,GlBolEP,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEF,SAAUzb,EAAQD,EAASH,GAEjC,YAEAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GmB7vEtD,IAAAsd,GAAAhe,EAAA,GACAie,EAAAje,EAAA,IACAke,EAAAle,EAAA,IAEIgN,EAAMgR,EAAA9Z,WAGNia,EAAS,GAAIF,GAAA7b,QAAW4K,GAGxBoR,EAAgB,GAAIF,GAAAnU,mBACpB,gHAEI/D,QAAS,EACTE,QAAS,GACTtF,KAAM,mBAGVyd,EAAsB,GAAIH,GAAAnU,mBAC1B,4GAEI/D,QAAS,EACTP,SAAS,EACT7E,KAAM,yBAGV0d,EAAiB,GAAIJ,GAAAnU,mBACrB,sGAEI/D,QAAS,EACTP,SAAS,EACT7E,KAAM,YACNuJ,YAAa,KAGjBoU,EAAiB,GAAIL,GAAAnU,mBACrB,sGAEI/D,QAAS,EACTP,SAAS,EACT7E,KAAM,YACNuJ,YAAa,IAGrB6C,GAAImJ,SAASiI,EAAc1V,SAC3BsE,EAAImJ,SAASmI,EAAe5V,SAC5BsE,EAAImJ,SAASoI,EAAe7V,SAC5BsE,EAAImJ,SAASkI,EAAoB3V,SAGjCyV,EAAOhB,aAAaiB,GACpBD,EAAOP,cAAcS,GAErBF,EAAOhB,aAAamB,GACpBH,EAAOP,cAAcW","file":"compare-test.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = ol;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util');\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        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n        return v.toString(16);\r\n    });\r\n}\r\nnm.makeGuid = makeGuid;\r\nexports.default = makeGuid;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapPopupCls_1 = __webpack_require__(12);\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexports.mapPopup = new mapPopupCls_1.default();\r\nexports.default = exports.mapPopup;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * base interaction\r\n */\r\nvar MapInteractionBase = (function () {\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    function MapInteractionBase(subtype) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\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    MapInteractionBase.prototype.init = function (theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    };\r\n    Object.defineProperty(MapInteractionBase.prototype, \"map\", {\r\n        /**\r\n         * get reference to the ol map object\r\n         * @returns {ol.Map} the map object\r\n         */\r\n        get: function () {\r\n            return this._map;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MapInteractionBase.prototype, \"initialized\", {\r\n        /**\r\n         * get if is initialized\r\n         * @returns {boolean} is initialized\r\n         */\r\n        get: function () {\r\n            return this._initialized;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    MapInteractionBase.prototype._checkInit = function () {\r\n        if (!this.initialized) {\r\n            var 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     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    MapInteractionBase.prototype.checkInit = function () {\r\n        this._checkInit();\r\n    };\r\n    return MapInteractionBase;\r\n}());\r\nexports.MapInteractionBase = MapInteractionBase;\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexports.default = MapInteractionBase;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapMoveCls_1 = __webpack_require__(11);\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\nexports.mapMove = new mapMoveCls_1.default();\r\nexports.default = exports.mapMove;\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar quickMapBase_1 = __webpack_require__(13);\r\nvar provide_1 = __webpack_require__(0);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMap(options) {\r\n    var m = quickMapBase_1.quickMapBase(options);\r\n    mapMove_1.default.init(m);\r\n    mapPopup_1.default.init(m);\r\n    return m;\r\n}\r\nexports.quickMap = quickMap;\r\nnm.quickMap = quickMap;\r\nexports.default = quickMap;\r\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar zoomResolutionConvert = __webpack_require__(14);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nvar LayerBase = (function () {\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    function LayerBase(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        options = options || {};\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\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        this.id = options.id || makeGuid_1.default();\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        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        }\r\n        else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        this._source = undefined;\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\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        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        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n        this._legendContent = '';\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        }\r\n        else {\r\n            this._legendContent += \"<label class=\\\"legend-layer-name\\\">\" + this.name + \"</label>\";\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     * 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    LayerBase.prototype._load = function () {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        }\r\n        else {\r\n            this._loaded = true;\r\n            return false;\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    LayerBase.prototype.getLegendDiv = function () {\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     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    LayerBase.prototype._addLegendContent = function (additionalContent) {\r\n        if (additionalContent === void 0) { additionalContent = ''; }\r\n        var addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n        this._legendContent += additionalContent;\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\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     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    LayerBase.prototype.addLegendContent = function (additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    };\r\n    LayerBase.prototype.applyCollapse = function () {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n            return undefined;\r\n        }\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\r\n        if (this._$legendDiv.length > 0) {\r\n            var $expander = this._$legendDiv.find('.legend-items-expander');\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n                $expander.click(function () {\r\n                    var $this = $(this);\r\n                    $this.siblings('ul').slideToggle();\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    }\r\n                    else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\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     * trick to refresh the layer\r\n     */\r\n    LayerBase.prototype.refresh = function () {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"id\", {\r\n        get: function () {\r\n            return this._id;\r\n        },\r\n        set: function (newId) {\r\n            this._id = newId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"animate\", {\r\n        get: function () {\r\n            return this._animate;\r\n        },\r\n        set: function (animate) {\r\n            this._animate = animate;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"legendContent\", {\r\n        /**\r\n         * get the legend content\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._legendContent;\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: function (newVal) {\r\n            this._legendContent = newVal;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"params\", {\r\n        /**\r\n         * get the map get params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._params;\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: function (newParams) {\r\n            this._params = newParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minResolution\", {\r\n        /**\r\n         * get the minimum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxResolution\", {\r\n        /**\r\n         * get the maximum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minZoom\", {\r\n        /**\r\n         * get min zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxZoom\", {\r\n        /**\r\n         * get max zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"url\", {\r\n        /**\r\n         * get the url\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._url;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"visible\", {\r\n        /**\r\n         * Get the layer visibility\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * set the visibility\r\n         * @param visibility\r\n         */\r\n        set: function (visibility) {\r\n            this.setVisible(visibility);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setVisible = function (visibility) {\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    Object.defineProperty(LayerBase.prototype, \"opacity\", {\r\n        /**\r\n         * Get the layer opacity\r\n         * @type {number}\r\n         */\r\n        get: function () {\r\n            return this._opacity;\r\n        },\r\n        /**\r\n         * Set the layer opacity\r\n         * @param {number} opacity - layer opacity\r\n         */\r\n        set: function (opacity) {\r\n            this._opacity = opacity;\r\n            if (this.olLayer) {\r\n                this.olLayer.setOpacity(this._opacity);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"name\", {\r\n        /**\r\n         * Get the layer name\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._name;\r\n        },\r\n        /**\r\n         * set the layer name\r\n         * @param {string} newName - the new name\r\n         */\r\n        set: function (newName) {\r\n            this._name = newName;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"loaded\", {\r\n        /**\r\n         * Check if the layer is loaded\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._loaded;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"source\", {\r\n        /**\r\n         * get the layer source\r\n         * @type {*}\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getSource = function () {\r\n        return this._source;\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"zIndex\", {\r\n        /**\r\n         * get the z index\r\n         */\r\n        get: function () {\r\n            return this._zIndex;\r\n        },\r\n        /**\r\n         * set the z index\r\n         */\r\n        set: function (newZ) {\r\n            this._zIndex = newZ;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setZIndex = function (newZ) {\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"olLayer\", {\r\n        /**\r\n         * the the ol layer\r\n         */\r\n        get: function () {\r\n            return this.getOlLayer();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getOlLayer = function () {\r\n        return this._olLayer;\r\n    };\r\n    return LayerBase;\r\n}());\r\nexports.LayerBase = LayerBase;\r\nnm.LayerBase = LayerBase;\r\nexports.default = LayerBase;\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util.checkDefined');\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\nfunction undefinedOrNull(input) {\r\n    \"use strict\";\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\nexports.undefinedOrNull = undefinedOrNull;\r\nnm.undefinedOrNull = undefinedOrNull;\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\nfunction definedAndNotNull(input) {\r\n    \"use strict\";\r\n    return !(undefinedOrNull(input));\r\n}\r\nexports.definedAndNotNull = definedAndNotNull;\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar esriToOl = __webpack_require__(16);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nvar LayerEsriMapServer = (function (_super) {\r\n    __extends(LayerEsriMapServer, _super);\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    function LayerEsriMapServer(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        _this._source = new ol.source.TileArcGISRest({\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        _this._olLayer = new ol.layer.Tile({\r\n            source: _this._source,\r\n            visible: _this.visible,\r\n            opacity: _this.opacity,\r\n            minResolution: _this._minResolution,\r\n            maxResolution: _this._maxResolution\r\n        });\r\n        _this._olLayer.setZIndex(_this._zIndex);\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n        _this._esriFormat = new ol.format.EsriJSON();\r\n        _this._popupRequest = null;\r\n        _this.addLegendContent();\r\n        if (options.addPopup) {\r\n            mapPopup_1.default.addMapServicePopup(_this);\r\n        }\r\n        return _this;\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    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {\r\n        var _this = this;\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n        $.get(urlCopy, {}, function (d) {\r\n            var newHtml = esriToOl.makeMapServiceLegend(d);\r\n            _super.prototype.addLegendContent.call(_this, newHtml);\r\n        }, 'json');\r\n    };\r\n    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'identify?callback=?';\r\n        var __this = this;\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {\r\n                var r = _a[_i];\r\n                var popupHtml = '<table class=\"esri-popup-table\">';\r\n                for (var a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        var attrVal = r['attributes'][a];\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n                        var attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n                        popupHtml += \"<tr><td>\" + attr + \"</td><td>\" + attrVal + \"</td></tr>\";\r\n                    }\r\n                }\r\n                popupHtml += '</table>';\r\n                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n    };\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"source\", {\r\n        /**\r\n         *\r\n         * @returns {ol.source.TileArcGISRest} the vector source\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getSource.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         * @returns the ol layer\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getOlLayer.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return LayerEsriMapServer;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerEsriMapServer = LayerEsriMapServer;\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexports.default = LayerEsriMapServer;\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar checkDefined = __webpack_require__(9);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nvar MapMoveCls = (function (_super) {\r\n    __extends(MapMoveCls, _super);\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    function MapMoveCls() {\r\n        var _this = _super.call(this, 'map move') || this;\r\n        _this._arrLyrRequest = [];\r\n        _this._arrLyrTimeout = [];\r\n        _this._arrLayer = [];\r\n        _this._lookupLayer = {};\r\n        _this._mapMoveCallbacks = [];\r\n        _this._mapMoveCallbacksLookup = {};\r\n        _this._mapMoveCallbackDelays = [];\r\n        _this._mapMoveCallbackContext = [];\r\n        _this._mapMoveCallbackTimeout = [];\r\n        _this._mapExtent = undefined;\r\n        _this._zoomLevel = undefined;\r\n        return _this;\r\n    }\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    MapMoveCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n            _this._updateMapExtent();\r\n            // trigger the layer updates\r\n            for (var i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n            // trigger the map callbacks\r\n            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    };\r\n    MapMoveCls.prototype._updateMapExtent = function () {\r\n        var theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n        var extentArray = theView.calculateExtent(this.map.getSize());\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    Object.defineProperty(MapMoveCls.prototype, \"mapExtent\", {\r\n        /**\r\n         * return the map extent\r\n         */\r\n        get: function () {\r\n            if (!this._mapExtent) {\r\n                this._updateMapExtent();\r\n            }\r\n            return this._mapExtent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        }\r\n        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        }\r\n        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\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        // 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        // dummy callback used if before load returns false\r\n        var callbackFunc = function () { };\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n            var __this_1 = this;\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    var _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {\r\n                        /**\r\n                         * @type {LayerBaseVector}\r\n                         */\r\n                        theLayer.mapMoveCallback(d);\r\n                        theLayer.loadCallback();\r\n                    }, 'json').fail(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(function () {\r\n                        _innerThis._arrLyrTimeout[theIndex] = null;\r\n                        _innerThis._arrLyrRequest[theIndex] = null;\r\n                    });\r\n                }\r\n                innerFunction.call(__this_1, lyr, index);\r\n            };\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     * 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    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {\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        if (typeof ind !== 'number') {\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n        if (ind < 0) {\r\n            console.log('function not found');\r\n            return;\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        var ctx = this._mapMoveCallbackContext[ind];\r\n        var theFunc = this._mapMoveCallbacks[ind];\r\n        var __this = this;\r\n        var f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n            else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\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    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {\r\n        if (triggerOnAdd === void 0) { triggerOnAdd = true; }\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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     * 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    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {\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_1.default();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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    return MapMoveCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapMoveCls = MapMoveCls;\r\nnm.MapMoveCls = MapMoveCls;\r\nexports.default = MapMoveCls;\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\nvar FeatureLayerProperties = (function () {\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    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {\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    Object.defineProperty(FeatureLayerProperties.prototype, \"layerName\", {\r\n        get: function () {\r\n            if (typeof this.esriLayerName == 'string') {\r\n                return this.esriLayerName;\r\n            }\r\n            else {\r\n                return this.layer.name;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return FeatureLayerProperties;\r\n}());\r\nexports.FeatureLayerProperties = FeatureLayerProperties;\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nvar MapPopupCls = (function (_super) {\r\n    __extends(MapPopupCls, _super);\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     * map popup constructor\r\n     */\r\n    function MapPopupCls() {\r\n        var _this = _super.call(this, 'map popup') || this;\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        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        _this._popupChangedFunctions = [];\r\n        _this._esriMapServiceLayers = [];\r\n        _this._popupOpen = false;\r\n        _this._popupCoordinate = null;\r\n        _this._passThroughLayerFeatureArray = [];\r\n        _this._currentPopupIndex = -1;\r\n        _this._popupContentLength = 0;\r\n        return _this;\r\n    }\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    MapPopupCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        var $map;\r\n        var target = this.map.getTarget();\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n        $map.append('<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        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        var _ease = function (n) {\r\n            return ol.easing.inAndOut(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        this._map.addOverlay(this._popupOverlay);\r\n        this._$popupCloser.click(function (evt) {\r\n            _this.closePopup();\r\n        });\r\n        // display popup on click\r\n        this._map.on('singleclick', function (evt) {\r\n            _this.closePopup();\r\n            _this._popupCoordinate = evt['coordinate'];\r\n            // esri map service layers\r\n            if (_this._esriMapServiceLayers.length > 0) {\r\n                var 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()).join(','),\r\n                    imageDisplay: _this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {\r\n                    var l = _a[_i];\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);\r\n            _this._passThroughLayerFeatureArray = [];\r\n            _this._currentPopupIndex = -1;\r\n            for (var i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                var featObj = layerFeatureObjectArray[i];\r\n                var props = featObj.feature.getProperties();\r\n                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                }\r\n                else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    _this._passThroughLayerFeatureArray.push(featObj);\r\n                }\r\n                else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;\r\n            _this._currentPopupIndex = -1;\r\n            var 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            popupHtml += '</div>';\r\n            _this._$popupContent.html(popupHtml);\r\n            _this._$popupContent.find('.previous-popup').click(function () {\r\n                if (_this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == 0) {\r\n                    _this._currentPopupIndex = _this._popupContentLength - 1;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex--;\r\n                }\r\n                _this._triggerFeatSelect();\r\n            });\r\n            var nextPopup = _this._$popupContent.find('.next-popup');\r\n            nextPopup.click(function () {\r\n                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == _this._popupContentLength - 1) {\r\n                    _this._currentPopupIndex = 0;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex++;\r\n                }\r\n                _this._triggerFeatSelect();\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        //change mouse cursor when over marker\r\n        this._map.on('pointermove', function (evt) {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            var pixel = _this.map.getEventPixel(evt['originalEvent']);\r\n            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {\r\n                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {\r\n                    var olLayer = _a[_i];\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            });\r\n            var mapElement = _this.map.getTargetElement();\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n        return true;\r\n    };\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._triggerFeatSelect = function () {\r\n        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        var $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        var 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 (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\r\n            f(this._$popupContent);\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    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {\r\n        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);\r\n        featLayerObject.popupContent = popupContent;\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').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     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._featuresAtPixel = function (pixel) {\r\n        var _this = this;\r\n        var layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {\r\n            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n        return layerFeatureObjectArray;\r\n    };\r\n    MapPopupCls.prototype.closePopup = function () {\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        return false;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\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    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {\r\n        this._checkInit();\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        var theStyle;\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        }\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        var selectionLayer = new ol.layer.Vector({\r\n            source: new ol.source.Vector(),\r\n            style: theStyle\r\n        });\r\n        selectionLayer.setZIndex(100);\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n        return selectionLayer;\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    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {\r\n        var 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        return selectionLayer;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    MapPopupCls.prototype.removeVectorPopup = function (lyr) {\r\n        var idx = this._arrPopupLayerIds.indexOf(lyr.id);\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     * @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    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {\r\n        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n        return selectionLayer;\r\n    };\r\n    MapPopupCls.prototype.clearSelection = function () {\r\n        this._checkInit();\r\n        for (var i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\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    MapPopupCls.prototype.addMapClickFunction = function (func) {\r\n        this._mapClickFunctions.push(func);\r\n    };\r\n    return MapPopupCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapPopupCls = MapPopupCls;\r\nnm.MapPopupCls = MapPopupCls;\r\nexports.default = MapPopupCls;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMapBase(options) {\r\n    options = options || {};\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    var $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n    var 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    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')\";\r\n    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==')\";\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    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        var p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        p.transform(new ol.proj.Projection({ code: \"EPSG:4326\" }), new ol.proj.Projection({ code: \"EPSG:3857\" }));\r\n        var coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n    var controls = ol.control.defaults({\r\n        attributionOptions: { collapsible: false }\r\n    });\r\n    var 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    var 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    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n    return map;\r\n}\r\nexports.quickMapBase = quickMapBase;\r\nnm.quickMapBase = quickMapBase;\r\nexports.default = quickMapBase;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers.zoomResolutionConvert');\r\nvar _zoomResLookup = [\r\n    156543.03392804097,\r\n    78271.51696402048,\r\n    39135.75848201024,\r\n    19567.87924100512,\r\n    9783.93962050256,\r\n    4891.96981025128,\r\n    2445.98490512564,\r\n    1222.99245256282,\r\n    611.49622628141,\r\n    305.748113140705,\r\n    152.8740565703525,\r\n    76.43702828517625,\r\n    38.21851414258813,\r\n    19.109257071294063,\r\n    9.554628535647032,\r\n    4.777314267823516,\r\n    2.388657133911758,\r\n    1.194328566955879,\r\n    0.5971642834779395,\r\n    0.29858214173896974,\r\n    0.14929107086948487,\r\n    0.07464553543474244,\r\n    0.03732276771737122,\r\n    0.01866138385868561,\r\n    0.009330691929342804,\r\n    0.004665345964671402,\r\n    0.002332672982335701,\r\n    0.0011663364911678506,\r\n    0.0005831682455839253 //28\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\nfunction zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        }\r\n        else {\r\n            console.log(\"invalid zoom level provided: \" + zoomLevel);\r\n            return undefined;\r\n        }\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\nexports.zoomToResolution = zoomToResolution;\r\nnm.zoomToResolution = zoomToResolution;\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\nfunction resolutionToZoom(resolution) {\r\n    for (var i = 0; i < _zoomResLookup.length; i++) {\r\n        if (resolution >= _zoomResLookup[i]) {\r\n            return i;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.resolutionToZoom = resolutionToZoom;\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n/***/ }),\n/* 15 */,\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar nm = provide_1.default('olHelpers.esriToOlStyle');\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 * @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    return \"rgba(\" + colorArray[0] + \",\" + colorArray[1] + \",\" + colorArray[2] + \",\" + opacity + \")\";\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\nnm.htmlEscape = htmlEscape;\r\nvar CommonSymbol = (function () {\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    function CommonSymbol(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n    return CommonSymbol;\r\n}());\r\nvar PointSymbol = (function (_super) {\r\n    __extends(PointSymbol, _super);\r\n    function PointSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\r\n                var radius = _this.symbolObj.size;\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        return _this;\r\n    }\r\n    return PointSymbol;\r\n}(CommonSymbol));\r\nvar LineSymbol = (function (_super) {\r\n    __extends(LineSymbol, _super);\r\n    function LineSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var lineWidth = _this.symbolObj.width;\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                _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        return _this;\r\n    }\r\n    return LineSymbol;\r\n}(CommonSymbol));\r\nvar PolygonSymbol = (function (_super) {\r\n    __extends(PolygonSymbol, _super);\r\n    function PolygonSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\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                _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            default:\r\n                console.log(_this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);\r\n        }\r\n        return _this;\r\n    }\r\n    return PolygonSymbol;\r\n}(CommonSymbol));\r\nvar SymbolGenerator = (function () {\r\n    function SymbolGenerator(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    return SymbolGenerator;\r\n}());\r\nvar SingleSymbol = (function (_super) {\r\n    __extends(SingleSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    function SingleSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.symbol = _this.renderer.symbol;\r\n        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);\r\n        _this.olStyle = symbolObj.olStyle;\r\n        _this.legendHtml = symbolObj.legendHtml;\r\n        return _this;\r\n    }\r\n    return SingleSymbol;\r\n}(SymbolGenerator));\r\nvar UniqueValueSymbol = (function (_super) {\r\n    __extends(UniqueValueSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    function UniqueValueSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];\r\n        _this.propertyName = _this.renderer['field1'];\r\n        _this.defaultSymbol = _this.renderer['defaultSymbol'];\r\n        if (_this.defaultSymbol) {\r\n            var 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        }\r\n        else {\r\n            _this.defaultStyle = undefined;\r\n            _this.defaultLabelHtml = 'other';\r\n        }\r\n        _this.valueArray = [];\r\n        _this.labelArray = [];\r\n        _this.legendArray = [];\r\n        _this.propertyStyleLookup = {};\r\n        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {\r\n            var uniqueVal = _a[_i];\r\n            _this.labelArray.push(uniqueVal['label']);\r\n            _this.valueArray.push(uniqueVal['value']);\r\n            var 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        _this.olStyle = function (feature) {\r\n            var checkProperties = feature.getProperties();\r\n            var checkProperty = checkProperties[_this.propertyName];\r\n            var returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            }\r\n            else {\r\n                returnValue = [_this.defaultStyle];\r\n            }\r\n            return returnValue;\r\n        };\r\n        if (_this.defaultLabelHtml !== null) {\r\n            _this.legendArray.push(_this.defaultLabelHtml);\r\n        }\r\n        _this.legendHtml = '<ul>';\r\n        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {\r\n            var h = _c[_b];\r\n            _this.legendHtml += \"<li>\" + h + \"</li>\";\r\n        }\r\n        _this.legendHtml += '</ul>';\r\n        return _this;\r\n    }\r\n    return UniqueValueSymbol;\r\n}(SymbolGenerator));\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 * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nfunction makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    var renderer = esriResponse.drawingInfo.renderer;\r\n    var symbolLegendOut = null;\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    if (symbolLegendOut == null) {\r\n        return { style: undefined, legend: '' };\r\n    }\r\n    else {\r\n        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };\r\n    }\r\n}\r\nexports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\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) {\r\n    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    var layerName = lyrObject['layerName'];\r\n    var legendItems = lyrObject['legend'];\r\n    var legendHtml = '';\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\";\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    }\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 (var 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    if (!skipLayerNameAndExpander) {\r\n        legendHtml = \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\" + legendHtml;\r\n    }\r\n    return legendHtml;\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\nfunction makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n    var newLegendHtml = '';\r\n    var layers = esriResponse['layers'];\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    }\r\n    else {\r\n        newLegendHtml += '<ul>';\r\n        for (var i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n    return newLegendHtml;\r\n}\r\nexports.makeMapServiceLegend = makeMapServiceLegend;\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n/***/ }),\n/* 17 */,\n/* 18 */,\n/* 19 */,\n/* 20 */,\n/* 21 */,\n/* 22 */,\n/* 23 */,\n/* 24 */,\n/* 25 */,\n/* 26 */,\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('collections.layerSwipe');\r\nvar LayerSwipe = (function () {\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    function LayerSwipe(map, sliderContent) {\r\n        if (sliderContent === void 0) { sliderContent = ''; }\r\n        var _this = this;\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         * @type {Array<LayerBase>}\r\n         */\r\n        this.rightLayers = [];\r\n        this._percentRight = 50;\r\n        this.offset = null;\r\n        this._map = map;\r\n        this.$mapElement = $(map.getTargetElement());\r\n        this.$mapElement.append(\"<div class=\\\"layer-swiper\\\">\" + sliderContent + \"</div>\");\r\n        this.$swiper = this.$mapElement.find('.layer-swiper');\r\n        this.percentRight = this.percentRight;\r\n        this.dragging = false;\r\n        this.$mapElement.mouseleave(function () {\r\n            _this.dragging = false;\r\n        });\r\n        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {\r\n            evt.preventDefault();\r\n        });\r\n        this.$swiper.mousedown(function (evt) {\r\n            _this.dragging = true;\r\n            _this.offset = evt.offsetX;\r\n        });\r\n        $(window).mouseup(function () {\r\n            _this.dragging = false;\r\n        });\r\n        this.$mapElement.mousemove(function (evt) {\r\n            if (_this.dragging) {\r\n                var mapLeft = _this.$mapElement.position().left;\r\n                var mapWidth = _this.$mapElement.width();\r\n                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;\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    LayerSwipe.prototype.addLeftLayer = function (lyr) {\r\n        var _this = this;\r\n        if (this.leftLayers.indexOf(lyr) != -1) {\r\n            return;\r\n        }\r\n        lyr.olLayer.on('precompose', function (event) {\r\n            var ctx = event['context'];\r\n            var width = ctx.canvas.width * (_this.percentRight / 100);\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        lyr.olLayer.on('postcompose', function (event) {\r\n            var ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n        this.leftLayers.push(lyr);\r\n    };\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to right side\r\n     */\r\n    LayerSwipe.prototype.addRightLayer = function (lyr) {\r\n        var _this = this;\r\n        if (this.rightLayers.indexOf(lyr) != -1) {\r\n            return;\r\n        }\r\n        lyr.olLayer.on('precompose', function (event) {\r\n            var ctx = event['context'];\r\n            var width = ctx.canvas.width * (_this.percentRight / 100);\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        lyr.olLayer.on('postcompose', function (event) {\r\n            var ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n        this.rightLayers.push(lyr);\r\n    };\r\n    Object.defineProperty(LayerSwipe.prototype, \"percentRight\", {\r\n        get: function () {\r\n            return this._percentRight;\r\n        },\r\n        set: function (percent) {\r\n            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n            if (percent < 0) {\r\n                return;\r\n            }\r\n            else if (maxed && percent > this.percentRight) {\r\n                return;\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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return LayerSwipe;\r\n}());\r\nnm.LayerSwipe = LayerSwipe;\r\nexports.default = LayerSwipe;\r\n\n\n/***/ }),\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nvar quickMap_1 = __webpack_require__(7);\r\nvar layerSwipe_1 = __webpack_require__(27);\r\nvar LayerEsriMapServer_1 = __webpack_require__(10);\r\nvar map = quickMap_1.quickMap();\r\nvar swiper = new layerSwipe_1.default(map);\r\nvar wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {\r\n    minZoom: 6,\r\n    maxZoom: 12,\r\n    name: 'WisDOT Regions'\r\n});\r\nvar metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {\r\n    minZoom: 7,\r\n    visible: true,\r\n    name: 'Metamanager Segments'\r\n});\r\nvar truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {\r\n    minZoom: 7,\r\n    visible: true,\r\n    name: 'truck2014',\r\n    showLayers: [8]\r\n});\r\nvar truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {\r\n    minZoom: 7,\r\n    visible: true,\r\n    name: 'truck2015',\r\n    showLayers: [9]\r\n});\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// compare-test.js"," \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 95f473b09da6d84b9b8b","/**\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\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 = options || {} as quickMapOptions;\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 '../olHelpers/quickMap';\r\nimport LayerSwipe from '../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../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// ../../src/_test/compare-test.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/itsMap.js b/test-html/js/itsMap.js
index 0f576c0be5b37fd0fef1a7098ca44c3bc976da9b..2791afd3157160c000351c88486ec716909b12d8 100644
--- a/test-html/js/itsMap.js
+++ b/test-html/js/itsMap.js
@@ -1,2992 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!******************************!*\
-  !*** ./dist/_test/itsMap.js ***!
-  \******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/18/2015.
-	 */
-	"use strict";
-	var ItsLayerCollection_1 = __webpack_require__(/*! ../collections/ItsLayerCollection */ 26);
-	var LayerLegend_1 = __webpack_require__(/*! ../collections/LayerLegend */ 31);
-	var quickMap_1 = __webpack_require__(/*! ../olHelpers/quickMap */ 1);
-	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');
-
-
-/***/ },
-/* 1 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/quickMap.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var quickMapBase_1 = __webpack_require__(/*! ./quickMapBase */ 2);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var mapMove_1 = __webpack_require__(/*! ./mapMove */ 6);
-	var mapPopup_1 = __webpack_require__(/*! ./mapPopup */ 11);
-	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) {
-	    var m = quickMapBase_1.quickMapBase(options);
-	    mapMove_1.default.init(m);
-	    mapPopup_1.default.init(m);
-	    return m;
-	}
-	exports.quickMap = quickMap;
-	nm.quickMap = quickMap;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMap;
-
-
-/***/ },
-/* 2 */
-/*!****************************************!*\
-  !*** ./dist/olHelpers/quickMapBase.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	    options = 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) {
-	    }
-	    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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMapBase;
-
-
-/***/ },
-/* 3 */
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-/* 4 */
-/*!*********************!*\
-  !*** external "ol" ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	module.exports = ol;
-
-/***/ },
-/* 5 */
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-/* 6 */
-/*!***********************************!*\
-  !*** ./dist/olHelpers/mapMove.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapMoveCls_1 = __webpack_require__(/*! ./mapMoveCls */ 7);
-	/**
-	 * The single map move object catch is that it is common to multimap pages
-	 * @type {MapMoveCls}
-	 */
-	exports.mapMove = new mapMoveCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapMove;
-
-
-/***/ },
-/* 7 */
-/*!**************************************!*\
-  !*** ./dist/olHelpers/mapMoveCls.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var checkDefined = __webpack_require__(/*! ../util/checkDefined */ 9);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapMoveCls;
-
-
-/***/ },
-/* 8 */
-/*!**********************************************!*\
-  !*** ./dist/olHelpers/mapInteractionBase.js ***!
-  \**********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 12/8/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapInteractionBase;
-
-
-/***/ },
-/* 9 */
-/*!***********************************!*\
-  !*** ./dist/util/checkDefined.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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 */
-/*!*******************************!*\
-  !*** ./dist/util/makeGuid.js ***!
-  \*******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = makeGuid;
-
-
-/***/ },
-/* 11 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/mapPopup.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapPopupCls_1 = __webpack_require__(/*! ./mapPopupCls */ 12);
-	/**
-	 * The single popup object catch is that it is common to multimap pages
-	 * @type {MapPopupCls}
-	 */
-	exports.mapPopup = new mapPopupCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapPopup;
-
-
-/***/ },
-/* 12 */
-/*!***************************************!*\
-  !*** ./dist/olHelpers/mapPopupCls.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	                }
-	                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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapPopupCls;
-
-
-/***/ },
-/* 13 */,
-/* 14 */,
-/* 15 */
-/*!**********************************!*\
-  !*** ./dist/layers/LayerBase.js ***!
-  \**********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var zoomResolutionConvert = __webpack_require__(/*! ../olHelpers/zoomResolutionConvert */ 16);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBase;
-
-
-/***/ },
-/* 16 */
-/*!*************************************************!*\
-  !*** ./dist/olHelpers/zoomResolutionConvert.js ***!
-  \*************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/14/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ },
-/* 17 */,
-/* 18 */,
-/* 19 */,
-/* 20 */,
-/* 21 */,
-/* 22 */
-/*!****************************************!*\
-  !*** ./dist/layers/LayerBaseVector.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var mapMove_1 = __webpack_require__(/*! ../olHelpers/mapMove */ 6);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBaseVector;
-
-
-/***/ },
-/* 23 */,
-/* 24 */,
-/* 25 */,
-/* 26 */
-/*!************************************************!*\
-  !*** ./dist/collections/ItsLayerCollection.js ***!
-  \************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/14/2015.
-	 */
-	"use strict";
-	var colors = __webpack_require__(/*! ../util/colors */ 27);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var LayerItsInventory_1 = __webpack_require__(/*! ../layers/LayerItsInventory */ 28);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = ItsLayerCollection;
-
-
-/***/ },
-/* 27 */
-/*!*****************************!*\
-  !*** ./dist/util/colors.js ***!
-  \*****************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	var chk = __webpack_require__(/*! ./checkDefined */ 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;
-
-
-/***/ },
-/* 28 */
-/*!******************************************!*\
-  !*** ./dist/layers/LayerItsInventory.js ***!
-  \******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/8/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBaseVectorGeoJson_1 = __webpack_require__(/*! ./LayerBaseVectorGeoJson */ 29);
-	var mapPopup_1 = __webpack_require__(/*! ../olHelpers/mapPopup */ 11);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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';
-	        }
-	        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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerItsInventory;
-
-
-/***/ },
-/* 29 */
-/*!***********************************************!*\
-  !*** ./dist/layers/LayerBaseVectorGeoJson.js ***!
-  \***********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/2/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var LayerBaseVector_1 = __webpack_require__(/*! ./LayerBaseVector */ 22);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var proj = __webpack_require__(/*! ../olHelpers/projections */ 30);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	var nm = provide_1.default('layers');
-	/**
-	 * The Vector GeoJson Layer
-	 * @augments LayerBaseVector
-	 */
-	var LayerBaseVectorGeoJson = (function (_super) {
-	    __extends(LayerBaseVectorGeoJson, _super);
-	    /**
-	     * @param {string|undefined|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) {
-	        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 || { dataProjection: proj.proj4326, featureProjection: proj.proj3857 };
-	        if (_this.autoLoad || _this.visible) {
-	            _this._load();
-	        }
-	        return _this;
-	    }
-	    /**
-	     * add feature collection
-	     * @param {object} featureCollection - as geojson object
-	     */
-	    LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) {
-	        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
-	            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
-	        }
-	        else {
-	            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
-	        }
-	    };
-	    /**
-	     * 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, this._transform));
-	    };
-	    return LayerBaseVectorGeoJson;
-	}(LayerBaseVector_1.LayerBaseVector));
-	exports.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-	nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBaseVectorGeoJson;
-
-
-/***/ },
-/* 30 */
-/*!***************************************!*\
-  !*** ./dist/olHelpers/projections.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 10/3/2016.
-	 */
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	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' });
-
-
-/***/ },
-/* 31 */
-/*!*****************************************!*\
-  !*** ./dist/collections/LayerLegend.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/16/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var mapMove_1 = __webpack_require__(/*! ../olHelpers/mapMove */ 6);
-	var nm = provide_1.default('collections');
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerLegend;
-
-
-/***/ }
-/******/ ]);
+!function(e){function t(r){if(o[r])return o[r].exports;var n=o[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var o={};t.m=e,t.c=o,t.i=function(e){return e},t.d=function(e,o,r){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=37)}([function(e,t,o){"use strict";function r(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),o=window.gv,r=0;r<t.length;r++){void 0===o[t[r]]&&(o[t[r]]={}),o=o[t[r]]}return o}Object.defineProperty(t,"__esModule",{value:!0}),r("util"),window.gv.util.provide=r,t.default=r},function(e,t){e.exports=$},function(e,t){e.exports=ol},function(e,t,o){"use strict";function r(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}Object.defineProperty(t,"__esModule",{value:!0}),o(0).default("util").makeGuid=r,t.default=r},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(12);t.mapPopup=new r.default,t.default=t.mapPopup},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),n=r.default("olHelpers"),i=function(){function e(e){this._map=null,this._initialized=!1,this._subtype=e}return e.prototype.init=function(e){this._initialized||(this._map=e,this._initialized=!0)},Object.defineProperty(e.prototype,"map",{get:function(){return this._map},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"initialized",{get:function(){return this._initialized},enumerable:!0,configurable:!0}),e.prototype._checkInit=function(){if(!this.initialized){var e=this._subtype+" object not initialized";throw alert(e),console.log(e),e}},e.prototype.checkInit=function(){this._checkInit()},e}();t.MapInteractionBase=i,n.MapInteractionBase=i,t.default=i},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(11);t.mapMove=new r.default,t.default=t.mapMove},function(e,t,o){"use strict";function r(e){var t=n.quickMapBase(e);return a.default.init(t),l.default.init(t),t}Object.defineProperty(t,"__esModule",{value:!0});var n=o(13),i=o(0),a=o(6),l=o(4),s=i.default("olHelpers");t.quickMap=r,s.quickMap=r,t.default=r},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(14),n=o(0),i=o(3),a=o(1),l=n.default("layers"),s=function(){function e(e,t){if(void 0===t&&(t={}),t=t||{},"string"!=typeof e)throw"Invalid URL";this._url=e,this._params="object"==typeof t.params?t.params:{},this._legendCollapse="boolean"==typeof t.legendCollapse&&t.legendCollapse,this._legendCheckbox="boolean"!=typeof t.legendCheckbox||t.legendCheckbox,this.id=t.id||i.default(),this._name=t.name||"Unnamed Layer",this.animate=!1,this._opacity="number"==typeof t.opacity?t.opacity:1,this._opacity>1?this._opacity=1:this._opacity<0&&(this._opacity=0),this._visible="boolean"!=typeof t.visible||t.visible,this._source=void 0,this._olLayer=void 0,this._loaded=!1,this._maxResolution=r.zoomToResolution(t.minZoom),void 0!==this._maxResolution&&(this._maxResolution+=1e-5),this._minResolution=r.zoomToResolution(t.maxZoom),this._minZoom="number"==typeof t.minZoom?t.minZoom:void 0,this._maxZoom="number"==typeof t.maxZoom?t.maxZoom:void 0,this._zIndex="number"==typeof t.zIndex?t.zIndex:0,this.loadCallback="function"==typeof t.loadCallback?t.loadCallback:function(){},this._legendContent="",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>"):this._legendContent+='<label class="legend-layer-name">'+this.name+"</label>",this._$legendDiv=null,this._applyCollapseCalled=!1,this._addLegendContent("string"==typeof t.legendContent?t.legendContent:void 0)}return e.prototype._load=function(){return 1==this.loaded||(this._loaded=!0,!1)},e.prototype.getLegendDiv=function(){return'<div class="legend-layer-div" id="'+this.id+'-legend-layer-div">'+this._legendContent+"</div>"},e.prototype._addLegendContent=function(e){void 0===e&&(e=""),e.indexOf("<ul>")>-1&&(e='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'+e),this._legendContent+=e,this._$legendDiv=a("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0&&(this._$legendDiv.append(e),this.applyCollapse())},e.prototype.addLegendContent=function(e){this._addLegendContent(e)},e.prototype.applyCollapse=function(){if(this._applyCollapseCalled)return void console.log("collapse already applied");if(this._$legendDiv=a("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0){var e=this._$legendDiv.find(".legend-items-expander");e.length>0&&(this._applyCollapseCalled=!0,e.click(function(){var e=a(this);e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this._legendCollapse&&e.trigger("click"))}},e.prototype.refresh=function(){this.source&&this.source.refresh()},Object.defineProperty(e.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"animate",{get:function(){return this._animate},set:function(e){this._animate=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"legendContent",{get:function(){return this._legendContent},set:function(e){this._legendContent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"params",{get:function(){return this._params},set:function(e){this._params=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minResolution",{get:function(){return this._minResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxResolution",{get:function(){return this._maxResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minZoom",{get:function(){return this._minZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxZoom",{get:function(){return this._maxZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"visible",{get:function(){return this._visible},set:function(e){this.setVisible(e)},enumerable:!0,configurable:!0}),e.prototype.setVisible=function(e){this._visible=e,this.olLayer&&(this.olLayer.setVisible(this._visible),e&&!this._loaded&&this._load())},Object.defineProperty(e.prototype,"opacity",{get:function(){return this._opacity},set:function(e){this._opacity=e,this.olLayer&&this.olLayer.setOpacity(this._opacity)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"loaded",{get:function(){return this._loaded},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),e.prototype.getSource=function(){return this._source},Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(e){this._zIndex=e},enumerable:!0,configurable:!0}),e.prototype.setZIndex=function(e){},Object.defineProperty(e.prototype,"olLayer",{get:function(){return this.getOlLayer()},enumerable:!0,configurable:!0}),e.prototype.getOlLayer=function(){return this._olLayer},e}();t.LayerBase=s,l.LayerBase=s,t.default=s},function(e,t,o){"use strict";function r(e){return void 0===e||null===e}function n(e){return!r(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),a=i.default("util.checkDefined");t.undefinedOrNull=r,a.undefinedOrNull=r,t.definedAndNotNull=n,a.definedAndNotNull=n},,function(e,t,o){"use strict";var r=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function r(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(t,"__esModule",{value:!0});var n=o(5),i=o(9),a=o(0),l=o(3),s=o(1),p=a.default("olHelpers"),u=function(e){function t(){var t=e.call(this,"map move")||this;return t._arrLyrRequest=[],t._arrLyrTimeout=[],t._arrLayer=[],t._lookupLayer={},t._mapMoveCallbacks=[],t._mapMoveCallbacksLookup={},t._mapMoveCallbackDelays=[],t._mapMoveCallbackContext=[],t._mapMoveCallbackTimeout=[],t._mapExtent=void 0,t._zoomLevel=void 0,t}return r(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t),this.map.getView().on(["change:center","change:resolution"],function(e){o._updateMapExtent();for(var t=0;t<o._arrLayer.length;t++)o.triggerLyrLoad(o._arrLayer[t],t,e.type);for(var t=0;t<o._mapMoveCallbacks.length;t++)o.triggerMoveCallback(t,e.type)})},t.prototype._updateMapExtent=function(){var e=this.map.getView();this._zoomLevel=e.getZoom();var t=e.calculateExtent(this.map.getSize());this._mapExtent={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3]}},Object.defineProperty(t.prototype,"mapExtent",{get:function(){return this._mapExtent||this._updateMapExtent(),this._mapExtent},enumerable:!0,configurable:!0}),t.prototype.triggerLyrLoad=function(e,t,o){if(i.undefinedOrNull(e)&&i.undefinedOrNull(t))throw"need to define lyr or index";i.definedAndNotNull(e)&&i.undefinedOrNull(t)?t=this._arrLayer.indexOf(e):i.undefinedOrNull(e)&&i.definedAndNotNull(t)&&(e=this._arrLayer[t]),null!=this._arrLyrTimeout[t]&&(clearTimeout(this._arrLyrTimeout[t]),this._arrLyrTimeout[t]=null),null!=this._arrLyrRequest[t]&&4!=this._arrLyrRequest[t]&&(this._arrLyrRequest[t].abort(),this._arrLyrRequest[t]=null);var r=function(){};if(e.mapMoveBefore(this._zoomLevel,o)){e.mapMoveMakeGetParams(this._mapExtent,this._zoomLevel);var n=this;r=function(){function o(e,t){var o=this;this._arrLyrRequest[t]=s.get(e.url,e.mapMoveParams,function(t){e.mapMoveCallback(t),e.loadCallback()},"json").fail(function(t){"abort"!=t.statusText&&(console.log("failed"),console.log(e.url),console.log(e.mapMoveParams))}).always(function(){o._arrLyrTimeout[t]=null,o._arrLyrRequest[t]=null})}o.call(n,e,t)}}else e.clear();this._arrLyrTimeout[t]=setTimeout(r,e.onDemandDelay)},t.prototype.triggerMoveCallback=function(e,t,o){if(void 0===e&&void 0===o)throw"either the function index or the id must be defined";if("number"!=typeof e&&(e=this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[o])),e<0)return void console.log("function not found");null!=this._mapMoveCallbackTimeout[e]&&(clearTimeout(this._mapMoveCallbackTimeout[e]),this._mapMoveCallbackTimeout[e]=null);var r=this._mapMoveCallbackContext[e],n=this._mapMoveCallbacks[e],i=this,a=function(){null!==r?n.call(r,i._mapExtent,i._zoomLevel,t):n(i._mapExtent,i._zoomLevel,t)};this._mapMoveCallbackTimeout[e]=setTimeout(a,this._mapMoveCallbackDelays[e])},t.prototype.addVectorLayer=function(e,t){if(void 0===t&&(t=!0),this._arrLayer.indexOf(e)>-1)return void console.log("already added "+e.name+" to map move");this._checkInit(),this._arrLyrRequest.push(null),this._arrLyrTimeout.push(null),this._arrLayer.push(e),this._lookupLayer[e.id]=e,(t="boolean"!=typeof t||t)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerLyrLoad(e,this._arrLayer.length-1))},t.prototype.addCallback=function(e,t,o,r,n){if(this._mapMoveCallbacks.indexOf(e)>-1)return void console.log("this function already added to map move");this._checkInit(),n||(n=l.default()),this._mapMoveCallbacks.push(e),this._mapMoveCallbacksLookup[n]=n,this._mapMoveCallbackDelays.push("number"==typeof o?o:50),this._mapMoveCallbackContext.push(i.definedAndNotNull(t)?t:null),this._mapMoveCallbackTimeout.push(null),(r="boolean"!=typeof r||r)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerMoveCallback(this._mapMoveCallbacks.length-1))},t}(n.default);t.MapMoveCls=u,p.MapMoveCls=u,t.default=u},function(e,t,o){"use strict";var r=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function r(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(t,"__esModule",{value:!0});var n=o(5),i=o(0),a=o(2),l=o(1),s=i.default("olHelpers"),p=function(){function e(e,t,o,r,n){this.feature=e,this.layer=t,this.layerIndex=o,this.selectionLayer=r,this.popupContent="",this.esriLayerName="string"==typeof n?n:void 0}return Object.defineProperty(e.prototype,"layerName",{get:function(){return"string"==typeof this.esriLayerName?this.esriLayerName:this.layer.name},enumerable:!0,configurable:!0}),e}();t.FeatureLayerProperties=p;var u=function(e){function t(){var t=e.call(this,"map popup")||this;return t._arrPopupLayerIds=[],t._arrPopupLayerNames=[],t._arrPopupLayers=[],t._arrPopupOlLayers=[],t._arrPopupContentFunction=[],t._$popupContainer=void 0,t._$popupContent=void 0,t._$popupCloser=void 0,t._popupOverlay=void 0,t._selectionLayers=[],t._selectionLayerLookup={},t._mapClickFunctions=[],t._popupChangedFunctions=[],t._esriMapServiceLayers=[],t._popupOpen=!1,t._popupCoordinate=null,t._passThroughLayerFeatureArray=[],t._currentPopupIndex=-1,t._popupContentLength=0,t}return r(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t);var r,n=this.map.getTarget();r=l("string"==typeof n?"#"+n:n),r.append('<div class="ol-popup"><span class="ol-popup-closer">X</span><div class="popup-content"></div></div>'),this._$popupContainer=r.find(".ol-popup"),this._$popupContent=r.find(".popup-content"),this._$popupCloser=r.find(".ol-popup-closer");var i=function(e){return a.easing.inAndOut(e)};return this._popupOverlay=new a.Overlay({element:this._$popupContainer[0],autoPan:!0,autoPanAnimation:{duration:250,source:t.getView().getCenter(),easing:i}}),this._map.addOverlay(this._popupOverlay),this._$popupCloser.click(function(e){o.closePopup()}),this._map.on("singleclick",function(e){if(o.closePopup(),o._popupCoordinate=e.coordinate,o._esriMapServiceLayers.length>0)for(var t={geometry:e.coordinate.join(","),geometryType:"esriGeometryPoint",layers:"all",sr:o._map.getView().getProjection().getCode().split(":")[1],mapExtent:o._map.getView().calculateExtent(o._map.getSize()).join(","),imageDisplay:o._map.getSize().join(",")+",96",returnGeometry:!0,tolerance:15,f:"pjson"},r=0,n=o._esriMapServiceLayers;r<n.length;r++){var i=n[r];i.getPopupInfo(t)}var a=o._featuresAtPixel(e.pixel);o._passThroughLayerFeatureArray=[],o._currentPopupIndex=-1;for(var l=0;l<a.length;l++){var s=a[l],p=s.feature.getProperties(),u=o._arrPopupContentFunction[s.layerIndex](p,o._$popupContent);u===!1||("string"==typeof u?(s.popupContent=u,o._passThroughLayerFeatureArray.push(s)):s.selectionLayer.getSource().addFeature(s.feature))}o._popupContentLength=o._passThroughLayerFeatureArray.length,o._currentPopupIndex=-1;var c='<div class="ol-popup-nav">';c+='<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>',c+='<span class="next-popup ol-popup-nav-arrow">&#9654;</span>',c+='<span class="current-popup-item-number" style="font-weight: bold;"></span>',c+="<span>&nbsp;of&nbsp;</span>",c+='<span class="popup-content-length" style="font-weight: bold;">'+o._popupContentLength+"</span>",c+="<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>",c+='<span class="current-popup-layer-name"></span>',c+="</div>",c+='<div class="ol-popup-inner">',c+="</div>",o._$popupContent.html(c),o._$popupContent.find(".previous-popup").click(function(){1!=o._popupContentLength&&(0==o._currentPopupIndex?o._currentPopupIndex=o._popupContentLength-1:o._currentPopupIndex--,o._triggerFeatSelect())});var d=o._$popupContent.find(".next-popup");d.click(function(){1==o._popupContentLength&&o._currentPopupIndex>-1||(o._currentPopupIndex==o._popupContentLength-1?o._currentPopupIndex=0:o._currentPopupIndex++,o._triggerFeatSelect())}),o._popupContentLength>0&&(d.trigger("click"),o._popupOverlay.setPosition(o._popupCoordinate),o._$popupContent.scrollTop(0),o._popupOpen=!0)}),this._map.on("pointermove",function(e){if(!e.dragging){var t=o.map.getEventPixel(e.originalEvent),r=o.map.hasFeatureAtPixel(t,function(e){for(var t=0,r=o._arrPopupOlLayers;t<r.length;t++){if(e==r[t])return!0}return!1});o.map.getTargetElement().style.cursor=r?"pointer":""}}),!0},t.prototype._triggerFeatSelect=function(){var e=this._$popupContent.find(".current-popup-item-number"),t=this._$popupContent.find(".ol-popup-inner"),o=this._$popupContent.find(".current-popup-layer-name");this.clearSelection();var r=this._passThroughLayerFeatureArray[this._currentPopupIndex];e.html((this._currentPopupIndex+1).toFixed()),o.html(r.layerName),t.html(r.popupContent),r.selectionLayer.getSource().addFeature(r.feature);for(var n=0,i=this._popupChangedFunctions;n<i.length;n++){(0,i[n])(this._$popupContent)}},t.prototype.addMapServicePopupContent=function(e,t,o,r){var n=new p(e,t,this._popupContentLength,this._selectionLayerLookup[t.id],r);n.popupContent=o,this._passThroughLayerFeatureArray.push(n),this._popupContentLength++,l(".popup-content-length").html(this._popupContentLength.toFixed()),this._popupOpen||(this._$popupContent.find(".next-popup").trigger("click"),this._popupOverlay.setPosition(this._popupCoordinate),this._$popupContent.scrollTop(0),this._popupOpen=!0)},t.prototype._featuresAtPixel=function(e){var t=this,o=[];return this.map.forEachFeatureAtPixel(e,function(e,r){var n=t._arrPopupOlLayers.indexOf(r);n>-1&&o.push(new p(e,t._arrPopupLayers[n],n,t._selectionLayers[n]))}),o},t.prototype.closePopup=function(){return this._checkInit(),this._popupOpen=!1,this._popupOverlay.setPosition(void 0),this._$popupCloser[0].blur(),this.clearSelection(),this._$popupContent.html(""),!1},t.prototype.addPopupChangedFunction=function(e){this._popupChangedFunctions.push(e)},t.prototype._addPopupLayer=function(e,t){this._checkInit(),t=t||{},t.color=t.color||"rgba(255,170,0,0.5)",t.width=t.width||10;var o;o=t.olStyle?t.olStyle:new a.style.Style({stroke:new a.style.Stroke({color:t.color,width:t.width}),image:new a.style.Circle({radius:7,fill:new a.style.Fill({color:t.color}),stroke:new a.style.Stroke({color:t.color,width:1})}),fill:new a.style.Fill({color:t.color})});var r=new a.layer.Vector({source:new a.source.Vector,style:o});return r.setZIndex(100),this._selectionLayers.push(r),this._selectionLayerLookup[e.id]=r,this.map.addLayer(r),r},t.prototype.addVectorPopup=function(e,t,o){var r=this._addPopupLayer(e,o);return this._arrPopupLayerIds.push(e.id),this._arrPopupLayerNames.push(e.name),this._arrPopupLayers.push(e),this._arrPopupOlLayers.push(e.olLayer),this._arrPopupContentFunction.push(t),r},t.prototype.removeVectorPopup=function(e){var t=this._arrPopupLayerIds.indexOf(e.id);t>-1&&(this._arrPopupLayerIds.splice(t,1),this._arrPopupLayerNames.splice(t,1),this._arrPopupLayers.splice(t,1),this._arrPopupOlLayers.splice(t,1),this._arrPopupContentFunction.splice(t,1),this._selectionLayers.splice(t,1),delete this._selectionLayerLookup[e.id])},t.prototype.addMapServicePopup=function(e,t){var o=this._addPopupLayer(e,t);return this._esriMapServiceLayers.push(e),o},t.prototype.clearSelection=function(){this._checkInit();for(var e=0;e<this._selectionLayers.length;e++)this._selectionLayers[e].getSource().clear();for(var t=0,o=this._mapClickFunctions;t<o.length;t++){(0,o[t])()}},t.prototype.addMapClickFunction=function(e){this._mapClickFunctions.push(e)},t}(n.default);t.MapPopupCls=u,s.MapPopupCls=u,t.default=u},function(e,t,o){"use strict";function r(e){e=e||{},e.divId=e.divId||"map",e.center=e.center||{x:-10018378,y:5574910},e.zoom="number"==typeof e.zoom?e.zoom:7,e.baseSwitcher="boolean"!=typeof e.baseSwitcher||e.baseSwitcher,e.fullScreen="boolean"==typeof e.fullScreen&&e.fullScreen,a("#"+e.divId).css("position","relative");var t=new i.layer.Tile({source:new i.source.OSM});if(e.baseSwitcher,e.zoom<0||e.zoom>28)throw"zoom out of range";if(e.center.x>=-180&&e.center.x<=180&&e.center.y>=-90&&e.center.y<=90){var o=new i.geom.Point([e.center.x,e.center.y]);new i.proj.Projection({code:"EPSG:4326"}),o.transform(new i.proj.Projection({code:"EPSG:4326"}),new i.proj.Projection({code:"EPSG:3857"}));var r=o.getCoordinates();e.center.x=r[0],e.center.y=r[1]}var n=i.control.defaults({attributionOptions:{collapsible:!1}}),l=new i.View({center:[e.center.x,e.center.y],zoom:e.zoom,minZoom:e.minZoom,maxZoom:e.maxZoom}),s=new i.Map({layers:[t],target:e.divId,controls:n,view:l});return e.fullScreen&&s.addControl(new i.control.FullScreen({})),s}Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),i=o(2),a=o(1),l=n.default("olHelpers");t.quickMapBase=r,l.quickMapBase=r,t.default=r},function(e,t,o){"use strict";function r(e){return"number"==typeof e?e%1==0&&e>=0&&e<=28?l[e]:void console.log("invalid zoom level provided: "+e):void 0}function n(e){for(var t=0;t<l.length;t++)if(e>=l[t])return t;return 0}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),a=i.default("olHelpers.zoomResolutionConvert"),l=[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,.5971642834779395,.29858214173896974,.14929107086948487,.07464553543474244,.03732276771737122,.01866138385868561,.009330691929342804,.004665345964671402,.002332672982335701,.0011663364911678506,.0005831682455839253];t.zoomToResolution=r,a.zoomToResolution=r,t.resolutionToZoom=n,a.resolutionToZoom=n},,,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),n=o(3),i=o(6),a=r.default("collections"),l=o(1),s=function(){function e(e,t){this.groupLayers=[],this.groupLayersLookup={},this.groupGroups=[],this.groupGroupsLookup={},this.itemIdArray=[],void 0===e?(this.parent=null,this.groupId="root",this.groupName="root",this.allGroupLookup={root:this},this.allGroupArray=[this],this.allLayerArray=[],this.allLayerLookup={},this.layerParentLookup={},this.collapse=!1,this.addCheck=!1):(this.groupId=n.default(),this.parent=t,this.groupName=e.groupName,this.collapse="boolean"==typeof e.collapse&&e.collapse,this.addCheck="boolean"!=typeof e.addCheck||e.addCheck)}return e.prototype.addGroup=function(t,o){var r;r=o.length>0?o[o.length-1]:"root";var n=this.allGroupLookup[r],i=new e(t,n);if(this.allGroupLookup[i.groupId]=i,this.allGroupArray.push(i),n.groupGroups.push(i),n.groupGroupsLookup[i.groupId]=i,n.itemIdArray.indexOf(i.groupId)>0)throw console.log(i.groupId),"layer and group ids must be unique";return n.itemIdArray.push(i.groupId),i},e.prototype.addLegendLayer=function(e,t){var o;o=t.length>0?t[t.length-1]:"root",this.allLayerLookup[e.id]=e,this.allLayerArray.push(e);var r=this.allGroupLookup[o];if(r.groupLayers.push(e),r.groupLayersLookup[e.id]=e,r.itemIdArray.indexOf(e.id)>0)throw console.log(e.id),"layer and group ids must be unique";r.itemIdArray.push(e.id),this.layerParentLookup[e.id]=r},e.prototype.getLegendHtml=function(e,t){var o='<ul id="'+e+'" class="legend-container">';return o+="<li>"+t.legendTitle+'<input type="checkbox" checked id="suppress-by-extent-'+e+'" class="suppress-by-extent"><label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-'+e+'"><span></span></label></li>',o+=this._buildLegend(this.itemIdArray,this,t.layerDivClasses)+"</ul>"},e.prototype._buildLegend=function(e,t,o){if(0==e.length)return"";var r="",n=e[0];if(t.groupLayersLookup[n]){var i=t.groupLayersLookup[n];r+='<li id="'+i.id+'-layer-li" class="legend-layer-li '+o.join(" ")+'">'+i.getLegendDiv()+"</li>"}else if(t.groupGroupsLookup[n]){var a=t.groupGroupsLookup[n];r+="<li>",r+='<div id="'+a.groupId+'-legend-layer-div" class="legend-layer-group  '+o.join(" ")+'">',r+=a.addCheck?'<input type="checkbox" checked id="'+a.groupId+'-group-chck"><label for="'+a.groupId+'-group-chck" title="Click arrow to expand or collapse">'+a.groupName+"</label>":'<label title="Click arrow to expand or collapse">'+a.groupName+"</label>",r+='<span title="Expand/Collapse" class="layer-group-expander',r+=(a.collapse?" legend-layer-group-initial-collapse":"")+'">',r+=a.collapse?"&#9654;":"&#9660;",r+="</span>",r+="<ul>"+this._buildLegend(a.itemIdArray,a,o)+"</ul>",r+="</div>",r+="</li>"}return r+this._buildLegend(e.slice(1),t,o)},e}(),p=function(){function e(e,t,o){for(var r=0,a=e;r<a.length;r++){if(void 0===a[r])throw"undefined item passed in array to legend constructor"}o=o||{},o.legendTitle="string"==typeof o.legendTitle?o.legendTitle:"Legend",o.scaleDependent="boolean"!=typeof o.scaleDependent||o.scaleDependent,o.layerDivClasses=o.layerDivClasses||[],o.scaleDependent&&i.default.checkInit(),this.$divElement=l("#"+t),this._legendItems=e,this.layerGroup=new s,this._buildTree(e),this.legendId=n.default(),this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId,o));for(var p=0,u=this.layerGroup.allLayerArray;p<u.length;p++){u[p].applyCollapse()}var c=this;o.scaleDependent&&(i.default.checkInit(),i.default.addCallback(function(e,t,o){if(void 0===o||"change:resolution"==o)for(var r=0,n=this.layerGroup.allLayerArray;r<n.length;r++){var i=n[r],a=l("#"+i.id+"-layer-li");t>i.maxZoom||t<i.minZoom?a.addClass("layer-not-visible"):a.removeClass("layer-not-visible")}},this,100,!0,"legend1")),this.$divElement.find(".suppress-by-extent").change(function(){var e=l(".legend-layer-li");this.checked?e.removeClass("layer-force-show"):e.addClass("layer-force-show")}),this.$divElement.find(".legend-check").change(function(){var e=this.id.replace("-legend-layer-check","");c.layerGroup.allLayerLookup[e].visible=this.checked}),this.$divElement.find(".legend-layer-group > input[type=checkbox]").change(function(){l(this).siblings("ul").find("input[type=checkbox]").prop("checked",this.checked).trigger("change")}),this.$divElement.find(".layer-group-expander").click(function(){var e=l(this);e.removeClass("legend-layer-group-initial-collapse"),e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this.$divElement.find(".legend-layer-group-initial-collapse").trigger("click")}return e.prototype._buildTree=function(e,t){if(0!=e.length){var o=e[0];if((this._legendItems.indexOf(o)>-1||void 0===t)&&(t=[]),void 0!==o.groupName){var r=e[0],n=this.layerGroup.addGroup(r,t);t.push(n.groupId),this._buildTree(r.items,t)}else{var i=e[0];this.layerGroup.addLegendLayer(i,t)}this._buildTree(e.slice(1),t)}},e}();a.LayerLegend=p,t.default=p},,,function(e,t,o){"use strict";var r=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function r(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(t,"__esModule",{value:!0});var n=o(8),i=o(6),a=o(0),l=o(2),s=o(1),p=a.default("layers"),u=function(e){function t(t,o){void 0===o&&(o={});var r=e.call(this,t,o)||this;return o=o,""==r.url.trim()&&(r._loaded=!0),r._style=void 0===o.style?void 0:o.style,r.visible?r._autoLoad=!0:r._autoLoad="boolean"==typeof o.autoLoad&&o.autoLoad,r._onDemand="boolean"==typeof o.onDemand&&o.onDemand,r._onDemandDelay="number"==typeof o.onDemandDelay?o.onDemandDelay:300,o.mapMoveObj?r._mapMove=o.mapMoveObj:r._mapMove=r._onDemand?i.default:void 0,r._mapMoveMakeGetParams="function"==typeof o.mapMoveMakeGetParams?o.mapMoveMakeGetParams:function(){return{}},r._onDemand&&(r._loaded=!0,r._mapMoveParams={},r._mapMove.checkInit(),r._mapMove.addVectorLayer(r)),r._source=new l.source.Vector,r._olLayer=new l.layer.Vector({source:r._source,visible:r.visible,style:r.style,minResolution:r._minResolution,maxResolution:r._maxResolution,renderOrder:o.renderOrder}),r.olLayer.setZIndex(r._zIndex),r._projectionMap=null,r._projection4326=new l.proj.Projection({code:"EPSG:4326"}),r}return r(t,e),t.prototype.addFeatures=function(e){console.log("Layer vector base addFeatures is a placeholder and does nothing")},t.prototype.mapMoveBefore=function(e,t){return!(void 0!==this.minZoom&&e<this.minZoom)&&(!(void 0!==this.maxZoom&&e>this.maxZoom)&&this.visible)},t.prototype.mapMoveMakeGetParams=function(e,t){this._mapMoveParams={},s.extend(this._mapMoveParams,this.params),s.extend(this._mapMoveParams,this._mapMoveMakeGetParams(this,e,t))},t.prototype.mapMoveCallback=function(e){this.source&&this._source.clear()},t.prototype.clear=function(){this._source&&this._source.clear()},Object.defineProperty(t.prototype,"onDemandDelay",{get:function(){return this._onDemandDelay},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"autoLoad",{get:function(){return this._autoLoad},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"style",{get:function(){return this._style},set:function(e){this._style=e,this.olLayer.setStyle(this._style)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapCrs",{get:function(){return null==this.mapProj?null:this.mapProj.getCode()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapProj",{get:function(){return null!=this._projectionMap?this._projectionMap:this._mapMove?(this._projectionMap=this._mapMove.map.getView().getProjection(),this._projectionMap):null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapMove",{get:function(){return this._mapMove},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapMoveParams",{get:function(){return this._mapMoveParams},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this._visible},set:function(t){e.prototype.setVisible.call(this,t),this._onDemand&&this.mapMove.triggerLyrLoad(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"features",{get:function(){return this.source.getFeatures()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return e.prototype.getOlLayer.call(this)},enumerable:!0,configurable:!0}),t.prototype.setZIndex=function(e){this.olLayer.setZIndex(e)},t}(n.LayerBase);t.LayerBaseVector=u,p.LayerBaseVector=u,t.default=u},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(2);t.proj4326=new r.proj.Projection({code:"EPSG:4326"}),t.proj3857=new r.proj.Projection({code:"EPSG:3857"}),t.proj3070=new r.proj.Projection({code:"EPSG:3070"})},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(33),n=o(0),i=o(30),a=n.default("collections"),l=[{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:!1},{name:"Lighting",itsType:"light",minZoom:16,itsIcon:"streetlight.png",visible:!1,onDemand:!0},{name:"Bluetooth",itsType:"blue",minZoom:10,itsIcon:"bluetooth.png",visible:!1},{name:"Cabinets",itsType:"cabinet",minZoom:10,itsIcon:"cabinet.png",visible:!1},{name:"Hut",itsType:"hut",minZoom:10,itsIcon:"hut.png",visible:!1},{name:"Vault",itsType:"vault",minZoom:13,itsIcon:"vault.png",visible:!1},{name:"Advisory Radio",itsType:"har",minZoom:10,itsIcon:"har.png",visible:!1},{name:"Loop Detectors",itsType:"loop",legendCollapse:!0,minZoom:14,visible:!1,itsIconConfig:{prop:"dtctrType",defaultName:"Other",defaultIcon:"loopdetectorother.png",iconArray:[["detector","Detector","loopdetector.png"],["long","Long","loopdetectorlong.png"],["zone","Zone","loopdetectorzone.png"]]},onDemand:!0},{name:"Microwave",itsType:"microwave",minZoom:14,itsIcon:"microwave.png",visible:!1},{name:"Pull Box",itsType:"pull",minZoom:14,itsIcon:"pullbox.png",visible:!1,onDemand:!0},{name:"RWIS",itsType:"rwis",minZoom:7,itsIcon:"rwis.png",visible:!1},{name:"Ramp Gates",itsType:"gate",minZoom:10,itsIcon:"rampgate.png",visible:!1},{name:"Ramp Meter",itsType:"meter",minZoom:10,itsIcon:"rampmeter.png",visible:!1},{name:"Signal",itsType:"signal",minZoom:13,itsIcon:"signal.png",visible:!1,onDemand:!0},{name:"Tower",itsType:"tower",minZoom:10,itsIcon:"tower.png",visible:!1},{name:"Trench",itsType:"trench",onDemand:!0,visible:!1,onDemandDelay:500,minZoom:15,legendCollapse:!0,itsLineConfig:{prop:"owner",defaultColor:r.hexAlphaToRgbOrRgba("#747474",.8),lineArray:[["WisDOT","WisDOT",r.hexAlphaToRgbOrRgba("#FF032F",.7)],["WIN","WIN",r.hexAlphaToRgbOrRgba("#FFC632",.7)],["USXchange","USXchange",r.hexAlphaToRgbOrRgba("#2DFF46",.7)],["AT&T","AT&T",r.hexAlphaToRgbOrRgba("#ff2be5",.7)],["Touch America","Touch America",r.hexAlphaToRgbOrRgba("#52f3ff",.7)],["Qwest","Qwest",r.hexAlphaToRgbOrRgba("#9278ff",.7)],["McLeodUSA","McLeodUSA",r.hexAlphaToRgbOrRgba("#2926FF",.7)],["CINC","CINC",r.hexAlphaToRgbOrRgba("#CB00FF",.7)],["City of Madison","Madison",r.hexAlphaToRgbOrRgba("#000380",.7)]]}}],s=function(){function e(e,t){this._map=e,this._layers=[],t="object"==typeof t?t:[];for(var o=0;o<l.length;o++){for(var r=l[o],n=!0,a=0;a<t.length;a++)if(t[a]==r.itsType){n=!1;break}if(n){var s=new i.default(r);this._map.addLayer(s.olLayer),this._layers.push(s)}}}return Object.defineProperty(e.prototype,"layers",{get:function(){return this._layers},enumerable:!0,configurable:!0}),e}();t.ItsLayerCollection=s,a.ItsLayerCollection=s,t.default=s},,,,,,function(e,t,o){"use strict";var r=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function r(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(t,"__esModule",{value:!0});var n=o(20),i=o(0),a=o(2),l=o(1),s=o(21),p=o(21),u=i.default("layers"),c=function(e){function t(t,o){void 0===o&&(o={});var r=this;return t="string"==typeof t?t:"",r=e.call(this,t,o)||this,r._geoJsonFormat=new a.format.GeoJSON,r._transform=o.transform||{},r._transform.dataProjection=r._transform.dataProjection||s.proj4326,r._transform.featureProjection=r._transform.featureProjection||p.proj3857,(r.autoLoad||r.visible)&&r._load(),r}return r(t,e),t.prototype.addFeatures=function(e){this.source.addFeatures(this._geoJsonFormat.readFeatures(e))},t.prototype._load=function(){var t=this;return!!e.prototype._load.call(this)||(l.get(this._url,this._params,function(e){t.addFeatures(e),t.loadCallback(t)},"json").fail(function(){this._loaded=!1}),!1)},t.prototype.mapMoveCallback=function(t){e.prototype.mapMoveCallback.call(this,t),this._source.addFeatures(this._geoJsonFormat.readFeatures(t,{featureProjection:this._transform.featureProjection,dataProjection:this._transform.dataProjection}))},t}(n.LayerBaseVector);t.LayerBaseVectorGeoJson=c,u.LayerBaseVectorGeoJson=c,t.default=c},,function(e,t,o){"use strict";function r(e,t,o,r){var n=0;if("string"==typeof e&&n++,"object"==typeof t&&(t.width="number"==typeof t.width?t.width:5,t.color="string"==typeof t.color?t.color:"red",n++),"object"==typeof o&&(o.defaultName=o.defaultName||"Other",void 0===o.iconArray&&(o.iconArray=[]),n++),"object"==typeof r){r.defaultName=r.defaultName||"Other",r.defaultWidth=r.defaultWidth||5,r.defaultColor=r.defaultColor||"red",void 0===r.lineArray&&(r.lineArray=[]);for(var i=0;i<r.lineArray.length;i++)3==r.lineArray[i].length&&r.lineArray[i].push(5);n++}if(n>1)throw"Only one style config can be defined"}function n(e,t,o,n){r(e,t,o,n);var i="http://transportal.cee.wisc.edu/its/inventory/icons/";return e?new u.style.Style({image:new u.style.Icon({src:i+e,crossOrigin:"anonymous"})}):t?new u.style.Style({stroke:new u.style.Stroke({color:t.color,width:t.width})}):o?function(e){for(var t=e.getProperties()[o.prop],r=i+o.defaultIcon,n=0;n<o.iconArray.length;n++){var a=o.iconArray[n];if(t.trim().toLocaleLowerCase()==a[0].trim().toLocaleLowerCase()){r=i+a[2];break}}return[new u.style.Style({image:new u.style.Icon({src:r,crossOrigin:"anonymous"})})]}:n?function(e){for(var t=e.getProperties()[n.prop],o=n.defaultColor||"red",r=n.defaultWidth||5,i=0;i<n.lineArray.length;i++){var a=n.lineArray[i];if(t.trim().toLocaleLowerCase()==a[0].trim().toLocaleLowerCase()){o=a[2],r=a[3];break}}return[new u.style.Style({stroke:new u.style.Stroke({color:o,width:r})})]}:void 0}function i(e,t,o,n){var i=17;r(e,t,o,n);var a="http://transportal.cee.wisc.edu/its/inventory/icons/";if(e)return'<img src="'+(a+e)+'" class="legend-layer-icon" height="'+i+'">';if(t)return'<hr style="height: '+t.width+"px; background-color: "+t.color+'">';if(o){var l="";l+="<ul>";for(var s=0,p=o.iconArray;s<p.length;s++){var u=p[s];l+='<li><span class="legend-layer-subitem">'+u[1]+'</span><img src="'+(a+u[2])+'" class="legend-layer-icon" height="'+i+'">'}return l+='<li><span class="legend-layer-subitem">'+o.defaultName+'</span><img src="'+(a+o.defaultIcon)+'" class="legend-layer-icon" height="'+i+'"></li>',l+="</ul>"}if(n){var l="";l+="<ul>";for(var c=0,d=n.lineArray;c<d.length;c++){var h=d[c];l+='<li><span class="legend-layer-subitem">'+h[1]+'</span><hr style="height: '+h[3]+"px; background-color: "+h[2]+'">'}return l+='<li><span class="legend-layer-subitem">'+n.defaultName+'</span><hr style="height: '+n.defaultWidth+"px; background-color: "+n.defaultColor+'"></li>',l+="</ul>"}return""}var a=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function r(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(t,"__esModule",{value:!0});var l=o(28),s=o(4),p=o(0),u=o(2),c=o(1),d=p.default("layers"),h=function(e){function t(t){var o=this;if("string"!=typeof t.itsType)throw"its type must be defined";var r="";return void 0===t.style&&(t.style=n(t.itsIcon,t.itsLineStyle,t.itsIconConfig,t.itsLineConfig),r=i(t.itsIcon,t.itsLineStyle,t.itsIconConfig,t.itsLineConfig)),t.params="object"==typeof t.params?t.params:{},c.extend(t.params,{format:"JSON",resource:t.itsType}),o=e.call(this,"http://transportal.cee.wisc.edu/its/inventory/",t)||this,o.addLegendContent(r),t.addPopup="boolean"!=typeof t.addPopup||t.addPopup,t.addPopup&&s.default.addVectorPopup(o,function(e){return'<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature='+e.featureGuid+'" height="250" width="350"></iframe>'}),o}return a(t,e),t.prototype.mapMoveMakeGetParams=function(t,o){e.prototype.mapMoveMakeGetParams.call(this,t,o);var r=new u.geom.Point([t.minX,t.minY]);r.transform(this.mapProj,this._projection4326);var n=r.getCoordinates(),i=new u.geom.Point([t.maxX,t.maxY]);i.transform(this.mapProj,this._projection4326);var a=i.getCoordinates();c.extend(this.mapMoveParams,{L:n[0],R:a[0],B:n[1],T:a[1]})},t}(l.default);d.LayerItsInventory=h,t.default=h},,,function(e,t,o){"use strict";function r(e){var t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return isNaN(e)?"00":t[(e-e%16)/16]+t[e%16]}function n(e){var t=e.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);return("#"+r(t[1])+r(t[2])+r(t[3])).toUpperCase()}function i(e,t){e="#"==e.charAt(0)?e.substring(1,7):e;var o=parseInt(e.substring(0,2),16).toString()||"0",r=parseInt(e.substring(2,4),16).toString()||"0",n=parseInt(e.substring(4,6),16).toString()||"0";return t?"rgba("+o+","+r+","+n+","+t+")":"rgba("+o+","+r+","+n+")"}function a(e,t){var o=e.split(",");return o[0]=o[0].replace("rgb","rgba"),o[2]=o[2].replace(")",""),o.push(" "+t.toFixed(1)+")"),o.join(",")}function l(e,t,o){return"boolean"!=typeof o&&(o=!1),function(r){var n,i,a,l;if(u.undefinedOrNull(r))return"rgb(100,100,100)";var s=(r-e)/(t-e);return 1==o&&(s=1-s),s>=1?(n=255,i=0,a=0):s<=0?(n=0,i=0,a=255):s<.25?(n=0,i=Math.floor(255*s/.25),a=255):s<.5?(l=(s-.25)/.25,n=0,i=255,a=255-Math.floor(255*l)):s<.75?(l=(s-.5)/.25,n=Math.floor(255*l),i=255,a=0):(l=(s-.75)/.25,n=255,i=255-Math.floor(255*l),a=0),n=n.toFixed(),i=i.toFixed(),a=a.toFixed(),"rgb("+n+","+i+","+a+")"}}function s(e,t,o){var r=l(-2.5,2.5,o);return function(o){var n;return n=null==o?null:(o-e)/t,r(n)}}Object.defineProperty(t,"__esModule",{value:!0});var p=o(0),u=o(9),c=p.default("util.colors");t.rgb2hex=n,c.rgb2hex=n,t.hexAlphaToRgbOrRgba=i,c.hexAlphaToRgbOrRgba=i,t.rgbToRgba=a,c.rgbToRgba=a,t.makeBlueGreenRedGradient=l,c.makeBlueGreenRedGradient=l,t.makeBlueGreenRedGradientZScore=s,c.makeBlueGreenRedGradientZScore=s},,,,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(22),n=o(17),i=o(7),a=i.default();window.map=a;var l=new r.default(a),s=[{groupName:"ITS Inventory Layers",collapse:!1,addCheck:!0,items:l.layers}];new n.default(s,"legend-container",{});console.log("it works")}]);
 //# sourceMappingURL=itsMap.js.map
\ No newline at end of file
diff --git a/test-html/js/itsMap.js.map b/test-html/js/itsMap.js.map
index 94ba00538034e1eefa8751c7b712f602d47fa173..522bb3d38338c28e472f5fbe21f2e6cbff4a9355 100644
--- a/test-html/js/itsMap.js.map
+++ b/test-html/js/itsMap.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3**","webpack:///./src/_test/itsMap.ts","webpack:///./src/olHelpers/quickMap.ts?1069*","webpack:///./src/olHelpers/quickMapBase.ts?fb65*","webpack:///./src/util/provide.ts?5c82*","webpack:///external \"ol\"?81ed*","webpack:///external \"$\"?57aa*","webpack:///./src/olHelpers/mapMove.ts?6a2b*","webpack:///./src/olHelpers/mapMoveCls.ts?cd45*","webpack:///./src/olHelpers/mapInteractionBase.ts?f419*","webpack:///./src/util/checkDefined.ts?bcd7*","webpack:///./src/util/makeGuid.ts?e80e*","webpack:///./src/olHelpers/mapPopup.ts?5d6c*","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7*","webpack:///./src/layers/LayerBase.ts?bf94*","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b*","webpack:///./src/layers/LayerBaseVector.ts?c105","webpack:///./src/collections/ItsLayerCollection.ts","webpack:///./src/util/colors.ts","webpack:///./src/layers/LayerItsInventory.ts","webpack:///./src/layers/LayerBaseVectorGeoJson.ts","webpack:///./src/olHelpers/projections.ts","webpack:///./src/collections/LayerLegend.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport ItsLayerCollection from '../collections/ItsLayerCollection';\r\nimport LayerLegend from '../collections/LayerLegend';\r\nimport quickMap from '../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// ./src/_test/itsMap.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\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","/**\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 = options || {} as quickMapOptions;\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/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 = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 4\n// module chunks = 0 2 3 7","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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","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 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","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 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 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","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","/**\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","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 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/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/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\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        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/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 {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nimport * as proj from '../olHelpers/projections';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('layers');\r\n\r\n\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions{\r\n    transform?: {dataProjection: ol.ProjectionLike, featureProjection: ol.ProjectionLike};\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: {dataProjection: ol.ProjectionLike, featureProjection: ol.ProjectionLike};\r\n\r\n    /**\r\n     * @param {string|undefined|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, 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 || {dataProjection: proj.proj4326, featureProjection: proj.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: JSON) {\r\n        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n        } else {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));\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, this._transform));\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 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/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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///itsMap.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d","webpack:///../../src/util/provide.ts?0b57","webpack:///external \"$\"?57aa","webpack:///external \"ol\"?81ed","webpack:///../../src/util/makeGuid.ts?60ef","webpack:///../../src/olHelpers/mapPopup.ts?b204","webpack:///../../src/olHelpers/mapInteractionBase.ts?98ee","webpack:///../../src/olHelpers/mapMove.ts?aaca","webpack:///../../src/olHelpers/quickMap.ts?6520","webpack:///../../src/layers/LayerBase.ts?8ea5","webpack:///../../src/util/checkDefined.ts?f518","webpack:///../../src/olHelpers/mapMoveCls.ts?0965","webpack:///../../src/olHelpers/mapPopupCls.ts?505f","webpack:///../../src/olHelpers/quickMapBase.ts?e5d6","webpack:///../../src/olHelpers/zoomResolutionConvert.ts?1717","webpack:///../../src/collections/LayerLegend.ts","webpack:///../../src/layers/LayerBaseVector.ts?fd79","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:///../../src/_test/itsMap.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","provide","namespace","window","parts","split","nameSpace","length","util","default","$","ol","makeGuid","replace","r","Math","random","toString","mapPopupCls_1","mapPopup","provide_1","nm","MapInteractionBase","subtype","this","_map","_initialized","_subtype","init","theMap","_checkInit","initialized","msg","alert","console","log","checkInit","mapMoveCls_1","mapMove","quickMap","options","quickMapBase_1","quickMapBase","mapMove_1","mapPopup_1","zoomResolutionConvert","makeGuid_1","LayerBase","url","_url","_params","params","_legendCollapse","legendCollapse","_legendCheckbox","legendCheckbox","id","_name","animate","_opacity","opacity","_visible","visible","_source","undefined","_olLayer","_loaded","_maxResolution","zoomToResolution","minZoom","_minResolution","maxZoom","_minZoom","_maxZoom","_zIndex","zIndex","loadCallback","_legendContent","_$legendDiv","_applyCollapseCalled","_addLegendContent","legendContent","_load","loaded","getLegendDiv","additionalContent","indexOf","append","applyCollapse","addLegendContent","$expander","find","click","$this","siblings","slideToggle","hasClass","removeClass","html","addClass","trigger","refresh","source","_id","set","newId","_animate","newVal","newParams","visibility","setVisible","olLayer","setOpacity","newName","getSource","newZ","setZIndex","getOlLayer","undefinedOrNull","input","definedAndNotNull","__extends","extendStatics","setPrototypeOf","__proto__","Array","b","__","constructor","create","mapInteractionBase_1","checkDefined","MapMoveCls","_super","_this","_arrLyrRequest","_arrLyrTimeout","_arrLayer","_lookupLayer","_mapMoveCallbacks","_mapMoveCallbacksLookup","_mapMoveCallbackDelays","_mapMoveCallbackContext","_mapMoveCallbackTimeout","_mapExtent","_zoomLevel","map","getView","on","e","_updateMapExtent","triggerLyrLoad","type","triggerMoveCallback","theView","getZoom","extentArray","calculateExtent","getSize","minX","minY","maxX","maxY","lyr","index","eventType","clearTimeout","abort","callbackFunc","mapMoveBefore","mapMoveMakeGetParams","__this_1","innerFunction","theLayer","theIndex","_innerThis","mapMoveParams","mapMoveCallback","fail","jqXHR","statusText","always","clear","setTimeout","onDemandDelay","ind","functionId","ctx","theFunc","__this","f","addVectorLayer","triggerOnAdd","push","addCallback","func","context","delay","FeatureLayerProperties","feature","layer","layerIndex","selectionLayer","esriLayerName","popupContent","MapPopupCls","_arrPopupLayerIds","_arrPopupLayerNames","_arrPopupLayers","_arrPopupOlLayers","_arrPopupContentFunction","_$popupContainer","_$popupContent","_$popupCloser","_popupOverlay","_selectionLayers","_selectionLayerLookup","_mapClickFunctions","_popupChangedFunctions","_esriMapServiceLayers","_popupOpen","_popupCoordinate","_passThroughLayerFeatureArray","_currentPopupIndex","_popupContentLength","$map","target","getTarget","_ease","easing","inAndOut","Overlay","element","autoPan","autoPanAnimation","duration","getCenter","addOverlay","evt","closePopup","queryParams","geometry","join","geometryType","layers","sr","getProjection","getCode","mapExtent","imageDisplay","returnGeometry","tolerance","_i","_a","getPopupInfo","layerFeatureObjectArray","_featuresAtPixel","featObj","props","getProperties","popupContentResponse","addFeature","popupHtml","_triggerFeatSelect","nextPopup","setPosition","scrollTop","pixel","getEventPixel","hit","hasFeatureAtPixel","lyrCandidate","getTargetElement","style","cursor","$currentPopupItemNumber","$innerPopup","$layerNameSpan","clearSelection","lyrFeatObj","toFixed","layerName","addMapServicePopupContent","esriName","featLayerObject","forEachFeatureAtPixel","lyrIndex","blur","addPopupChangedFunction","chgFunction","_addPopupLayer","selectionStyle","color","width","theStyle","olStyle","Style","stroke","Stroke","image","Circle","radius","fill","Fill","Vector","addLayer","addVectorPopup","popupContentFunction","removeVectorPopup","idx","splice","addMapServicePopup","addMapClickFunction","divId","center","x","y","zoom","baseSwitcher","fullScreen","css","osmLayer","Tile","OSM","geom","Point","proj","Projection","code","transform","coordinates","getCoordinates","controls","control","defaults","attributionOptions","collapsible","view","View","Map","addControl","FullScreen","zoomLevel","_zoomResLookup","resolutionToZoom","resolution","LayerGroup","groupConfig","parent","groupLayers","groupLayersLookup","groupGroups","groupGroupsLookup","itemIdArray","groupId","groupName","allGroupLookup","root","allGroupArray","allLayerArray","allLayerLookup","layerParentLookup","collapse","addCheck","addGroup","parents","parentGroup","newGroup","addLegendLayer","newLayer","getLegendHtml","legendId","legendHtml","legendTitle","_buildLegend","layerDivClasses","itemIds","theGroup","theHml","itemId","otherGroup","slice","LayerLegend","legendItems","legendItems_1","scaleDependent","$divElement","_legendItems","layerGroup","_buildTree","_b","ext","$lyrLi","change","legendLayerLis","checked","lyrId","prop","oneItem","groupItem","items","layerItem","LayerBase_1","LayerBaseVector","trim","_style","_autoLoad","_onDemand","onDemand","_onDemandDelay","mapMoveObj","_mapMove","_mapMoveMakeGetParams","_mapMoveParams","minResolution","maxResolution","renderOrder","_projectionMap","_projection4326","addFeatures","featureCollection","evtType","extent","extend","setStyle","mapProj","getFeatures","proj4326","proj3857","proj3070","colors","LayerItsInventory_1","itsConfig","itsType","itsIconConfig","defaultName","defaultIcon","iconArray","itsIcon","itsLineConfig","defaultColor","hexAlphaToRgbOrRgba","lineArray","ItsLayerCollection","exclude","_layers","lyrConfig","j","inventLyr","LayerBaseVector_1","projections_1","LayerBaseVectorGeoJson","_geoJsonFormat","format","GeoJSON","_transform","dataProjection","featureProjection","autoLoad","readFeatures","checkStyleNumber","itsLineStyle","configCount","defaultWidth","defineStyle","_iconUrlRoot","Icon","src","crossOrigin","symbolProp","iconUrl","thisProp","toLocaleLowerCase","colr","defineLegend","iconHeight","outHtml","a","_c","ls","LayerBaseVectorGeoJson_1","LayerItsInventory","addToLegend","resource","addPopup","lowerLeft","lowerLeftCoordinates","upperRight","upperRightCoordinates","L","R","B","T","_hex","hexDigits","isNaN","rgb2hex","rgb","rgb1","match","toUpperCase","hexString","alphaVal","charAt","substring","parseInt","g","rgbToRgba","alpha","pieces","makeBlueGreenRedGradient","minVal","maxVal","flipColors","theVal","ratio","chk","percent","floor","makeBlueGreenRedGradientZScore","median","stdDev","grd","zScore","ItsLayerCollection_1","LayerLegend_1","quickMap_1","itsLayerCollection","layerArray"],"mappings":"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","file":"itsMap.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = ol;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util');\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        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n        return v.toString(16);\r\n    });\r\n}\r\nnm.makeGuid = makeGuid;\r\nexports.default = makeGuid;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapPopupCls_1 = __webpack_require__(12);\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexports.mapPopup = new mapPopupCls_1.default();\r\nexports.default = exports.mapPopup;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * base interaction\r\n */\r\nvar MapInteractionBase = (function () {\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    function MapInteractionBase(subtype) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\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    MapInteractionBase.prototype.init = function (theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    };\r\n    Object.defineProperty(MapInteractionBase.prototype, \"map\", {\r\n        /**\r\n         * get reference to the ol map object\r\n         * @returns {ol.Map} the map object\r\n         */\r\n        get: function () {\r\n            return this._map;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MapInteractionBase.prototype, \"initialized\", {\r\n        /**\r\n         * get if is initialized\r\n         * @returns {boolean} is initialized\r\n         */\r\n        get: function () {\r\n            return this._initialized;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    MapInteractionBase.prototype._checkInit = function () {\r\n        if (!this.initialized) {\r\n            var 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     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    MapInteractionBase.prototype.checkInit = function () {\r\n        this._checkInit();\r\n    };\r\n    return MapInteractionBase;\r\n}());\r\nexports.MapInteractionBase = MapInteractionBase;\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexports.default = MapInteractionBase;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapMoveCls_1 = __webpack_require__(11);\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\nexports.mapMove = new mapMoveCls_1.default();\r\nexports.default = exports.mapMove;\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar quickMapBase_1 = __webpack_require__(13);\r\nvar provide_1 = __webpack_require__(0);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMap(options) {\r\n    var m = quickMapBase_1.quickMapBase(options);\r\n    mapMove_1.default.init(m);\r\n    mapPopup_1.default.init(m);\r\n    return m;\r\n}\r\nexports.quickMap = quickMap;\r\nnm.quickMap = quickMap;\r\nexports.default = quickMap;\r\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar zoomResolutionConvert = __webpack_require__(14);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nvar LayerBase = (function () {\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    function LayerBase(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        options = options || {};\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\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        this.id = options.id || makeGuid_1.default();\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        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        }\r\n        else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        this._source = undefined;\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\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        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        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n        this._legendContent = '';\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        }\r\n        else {\r\n            this._legendContent += \"<label class=\\\"legend-layer-name\\\">\" + this.name + \"</label>\";\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     * 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    LayerBase.prototype._load = function () {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        }\r\n        else {\r\n            this._loaded = true;\r\n            return false;\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    LayerBase.prototype.getLegendDiv = function () {\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     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    LayerBase.prototype._addLegendContent = function (additionalContent) {\r\n        if (additionalContent === void 0) { additionalContent = ''; }\r\n        var addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n        this._legendContent += additionalContent;\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\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     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    LayerBase.prototype.addLegendContent = function (additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    };\r\n    LayerBase.prototype.applyCollapse = function () {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n            return undefined;\r\n        }\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\r\n        if (this._$legendDiv.length > 0) {\r\n            var $expander = this._$legendDiv.find('.legend-items-expander');\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n                $expander.click(function () {\r\n                    var $this = $(this);\r\n                    $this.siblings('ul').slideToggle();\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    }\r\n                    else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\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     * trick to refresh the layer\r\n     */\r\n    LayerBase.prototype.refresh = function () {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"id\", {\r\n        get: function () {\r\n            return this._id;\r\n        },\r\n        set: function (newId) {\r\n            this._id = newId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"animate\", {\r\n        get: function () {\r\n            return this._animate;\r\n        },\r\n        set: function (animate) {\r\n            this._animate = animate;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"legendContent\", {\r\n        /**\r\n         * get the legend content\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._legendContent;\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: function (newVal) {\r\n            this._legendContent = newVal;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"params\", {\r\n        /**\r\n         * get the map get params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._params;\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: function (newParams) {\r\n            this._params = newParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minResolution\", {\r\n        /**\r\n         * get the minimum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxResolution\", {\r\n        /**\r\n         * get the maximum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minZoom\", {\r\n        /**\r\n         * get min zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxZoom\", {\r\n        /**\r\n         * get max zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"url\", {\r\n        /**\r\n         * get the url\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._url;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"visible\", {\r\n        /**\r\n         * Get the layer visibility\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * set the visibility\r\n         * @param visibility\r\n         */\r\n        set: function (visibility) {\r\n            this.setVisible(visibility);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setVisible = function (visibility) {\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    Object.defineProperty(LayerBase.prototype, \"opacity\", {\r\n        /**\r\n         * Get the layer opacity\r\n         * @type {number}\r\n         */\r\n        get: function () {\r\n            return this._opacity;\r\n        },\r\n        /**\r\n         * Set the layer opacity\r\n         * @param {number} opacity - layer opacity\r\n         */\r\n        set: function (opacity) {\r\n            this._opacity = opacity;\r\n            if (this.olLayer) {\r\n                this.olLayer.setOpacity(this._opacity);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"name\", {\r\n        /**\r\n         * Get the layer name\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._name;\r\n        },\r\n        /**\r\n         * set the layer name\r\n         * @param {string} newName - the new name\r\n         */\r\n        set: function (newName) {\r\n            this._name = newName;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"loaded\", {\r\n        /**\r\n         * Check if the layer is loaded\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._loaded;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"source\", {\r\n        /**\r\n         * get the layer source\r\n         * @type {*}\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getSource = function () {\r\n        return this._source;\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"zIndex\", {\r\n        /**\r\n         * get the z index\r\n         */\r\n        get: function () {\r\n            return this._zIndex;\r\n        },\r\n        /**\r\n         * set the z index\r\n         */\r\n        set: function (newZ) {\r\n            this._zIndex = newZ;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setZIndex = function (newZ) {\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"olLayer\", {\r\n        /**\r\n         * the the ol layer\r\n         */\r\n        get: function () {\r\n            return this.getOlLayer();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getOlLayer = function () {\r\n        return this._olLayer;\r\n    };\r\n    return LayerBase;\r\n}());\r\nexports.LayerBase = LayerBase;\r\nnm.LayerBase = LayerBase;\r\nexports.default = LayerBase;\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util.checkDefined');\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\nfunction undefinedOrNull(input) {\r\n    \"use strict\";\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\nexports.undefinedOrNull = undefinedOrNull;\r\nnm.undefinedOrNull = undefinedOrNull;\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\nfunction definedAndNotNull(input) {\r\n    \"use strict\";\r\n    return !(undefinedOrNull(input));\r\n}\r\nexports.definedAndNotNull = definedAndNotNull;\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar checkDefined = __webpack_require__(9);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nvar MapMoveCls = (function (_super) {\r\n    __extends(MapMoveCls, _super);\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    function MapMoveCls() {\r\n        var _this = _super.call(this, 'map move') || this;\r\n        _this._arrLyrRequest = [];\r\n        _this._arrLyrTimeout = [];\r\n        _this._arrLayer = [];\r\n        _this._lookupLayer = {};\r\n        _this._mapMoveCallbacks = [];\r\n        _this._mapMoveCallbacksLookup = {};\r\n        _this._mapMoveCallbackDelays = [];\r\n        _this._mapMoveCallbackContext = [];\r\n        _this._mapMoveCallbackTimeout = [];\r\n        _this._mapExtent = undefined;\r\n        _this._zoomLevel = undefined;\r\n        return _this;\r\n    }\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    MapMoveCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n            _this._updateMapExtent();\r\n            // trigger the layer updates\r\n            for (var i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n            // trigger the map callbacks\r\n            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    };\r\n    MapMoveCls.prototype._updateMapExtent = function () {\r\n        var theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n        var extentArray = theView.calculateExtent(this.map.getSize());\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    Object.defineProperty(MapMoveCls.prototype, \"mapExtent\", {\r\n        /**\r\n         * return the map extent\r\n         */\r\n        get: function () {\r\n            if (!this._mapExtent) {\r\n                this._updateMapExtent();\r\n            }\r\n            return this._mapExtent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        }\r\n        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        }\r\n        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\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        // 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        // dummy callback used if before load returns false\r\n        var callbackFunc = function () { };\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n            var __this_1 = this;\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    var _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {\r\n                        /**\r\n                         * @type {LayerBaseVector}\r\n                         */\r\n                        theLayer.mapMoveCallback(d);\r\n                        theLayer.loadCallback();\r\n                    }, 'json').fail(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(function () {\r\n                        _innerThis._arrLyrTimeout[theIndex] = null;\r\n                        _innerThis._arrLyrRequest[theIndex] = null;\r\n                    });\r\n                }\r\n                innerFunction.call(__this_1, lyr, index);\r\n            };\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     * 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    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {\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        if (typeof ind !== 'number') {\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n        if (ind < 0) {\r\n            console.log('function not found');\r\n            return;\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        var ctx = this._mapMoveCallbackContext[ind];\r\n        var theFunc = this._mapMoveCallbacks[ind];\r\n        var __this = this;\r\n        var f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n            else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\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    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {\r\n        if (triggerOnAdd === void 0) { triggerOnAdd = true; }\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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     * 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    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {\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_1.default();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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    return MapMoveCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapMoveCls = MapMoveCls;\r\nnm.MapMoveCls = MapMoveCls;\r\nexports.default = MapMoveCls;\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\nvar FeatureLayerProperties = (function () {\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    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {\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    Object.defineProperty(FeatureLayerProperties.prototype, \"layerName\", {\r\n        get: function () {\r\n            if (typeof this.esriLayerName == 'string') {\r\n                return this.esriLayerName;\r\n            }\r\n            else {\r\n                return this.layer.name;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return FeatureLayerProperties;\r\n}());\r\nexports.FeatureLayerProperties = FeatureLayerProperties;\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nvar MapPopupCls = (function (_super) {\r\n    __extends(MapPopupCls, _super);\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     * map popup constructor\r\n     */\r\n    function MapPopupCls() {\r\n        var _this = _super.call(this, 'map popup') || this;\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        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        _this._popupChangedFunctions = [];\r\n        _this._esriMapServiceLayers = [];\r\n        _this._popupOpen = false;\r\n        _this._popupCoordinate = null;\r\n        _this._passThroughLayerFeatureArray = [];\r\n        _this._currentPopupIndex = -1;\r\n        _this._popupContentLength = 0;\r\n        return _this;\r\n    }\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    MapPopupCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        var $map;\r\n        var target = this.map.getTarget();\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n        $map.append('<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        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        var _ease = function (n) {\r\n            return ol.easing.inAndOut(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        this._map.addOverlay(this._popupOverlay);\r\n        this._$popupCloser.click(function (evt) {\r\n            _this.closePopup();\r\n        });\r\n        // display popup on click\r\n        this._map.on('singleclick', function (evt) {\r\n            _this.closePopup();\r\n            _this._popupCoordinate = evt['coordinate'];\r\n            // esri map service layers\r\n            if (_this._esriMapServiceLayers.length > 0) {\r\n                var 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()).join(','),\r\n                    imageDisplay: _this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {\r\n                    var l = _a[_i];\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);\r\n            _this._passThroughLayerFeatureArray = [];\r\n            _this._currentPopupIndex = -1;\r\n            for (var i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                var featObj = layerFeatureObjectArray[i];\r\n                var props = featObj.feature.getProperties();\r\n                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                }\r\n                else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    _this._passThroughLayerFeatureArray.push(featObj);\r\n                }\r\n                else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;\r\n            _this._currentPopupIndex = -1;\r\n            var 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            popupHtml += '</div>';\r\n            _this._$popupContent.html(popupHtml);\r\n            _this._$popupContent.find('.previous-popup').click(function () {\r\n                if (_this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == 0) {\r\n                    _this._currentPopupIndex = _this._popupContentLength - 1;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex--;\r\n                }\r\n                _this._triggerFeatSelect();\r\n            });\r\n            var nextPopup = _this._$popupContent.find('.next-popup');\r\n            nextPopup.click(function () {\r\n                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == _this._popupContentLength - 1) {\r\n                    _this._currentPopupIndex = 0;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex++;\r\n                }\r\n                _this._triggerFeatSelect();\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        //change mouse cursor when over marker\r\n        this._map.on('pointermove', function (evt) {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            var pixel = _this.map.getEventPixel(evt['originalEvent']);\r\n            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {\r\n                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {\r\n                    var olLayer = _a[_i];\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            });\r\n            var mapElement = _this.map.getTargetElement();\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n        return true;\r\n    };\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._triggerFeatSelect = function () {\r\n        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        var $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        var 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 (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\r\n            f(this._$popupContent);\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    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {\r\n        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);\r\n        featLayerObject.popupContent = popupContent;\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').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     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._featuresAtPixel = function (pixel) {\r\n        var _this = this;\r\n        var layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {\r\n            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n        return layerFeatureObjectArray;\r\n    };\r\n    MapPopupCls.prototype.closePopup = function () {\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        return false;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\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    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {\r\n        this._checkInit();\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        var theStyle;\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        }\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        var selectionLayer = new ol.layer.Vector({\r\n            source: new ol.source.Vector(),\r\n            style: theStyle\r\n        });\r\n        selectionLayer.setZIndex(100);\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n        return selectionLayer;\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    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {\r\n        var 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        return selectionLayer;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    MapPopupCls.prototype.removeVectorPopup = function (lyr) {\r\n        var idx = this._arrPopupLayerIds.indexOf(lyr.id);\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     * @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    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {\r\n        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n        return selectionLayer;\r\n    };\r\n    MapPopupCls.prototype.clearSelection = function () {\r\n        this._checkInit();\r\n        for (var i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\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    MapPopupCls.prototype.addMapClickFunction = function (func) {\r\n        this._mapClickFunctions.push(func);\r\n    };\r\n    return MapPopupCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapPopupCls = MapPopupCls;\r\nnm.MapPopupCls = MapPopupCls;\r\nexports.default = MapPopupCls;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMapBase(options) {\r\n    options = options || {};\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    var $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n    var 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    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')\";\r\n    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==')\";\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    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        var p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        p.transform(new ol.proj.Projection({ code: \"EPSG:4326\" }), new ol.proj.Projection({ code: \"EPSG:3857\" }));\r\n        var coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n    var controls = ol.control.defaults({\r\n        attributionOptions: { collapsible: false }\r\n    });\r\n    var 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    var 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    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n    return map;\r\n}\r\nexports.quickMapBase = quickMapBase;\r\nnm.quickMapBase = quickMapBase;\r\nexports.default = quickMapBase;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers.zoomResolutionConvert');\r\nvar _zoomResLookup = [\r\n    156543.03392804097,\r\n    78271.51696402048,\r\n    39135.75848201024,\r\n    19567.87924100512,\r\n    9783.93962050256,\r\n    4891.96981025128,\r\n    2445.98490512564,\r\n    1222.99245256282,\r\n    611.49622628141,\r\n    305.748113140705,\r\n    152.8740565703525,\r\n    76.43702828517625,\r\n    38.21851414258813,\r\n    19.109257071294063,\r\n    9.554628535647032,\r\n    4.777314267823516,\r\n    2.388657133911758,\r\n    1.194328566955879,\r\n    0.5971642834779395,\r\n    0.29858214173896974,\r\n    0.14929107086948487,\r\n    0.07464553543474244,\r\n    0.03732276771737122,\r\n    0.01866138385868561,\r\n    0.009330691929342804,\r\n    0.004665345964671402,\r\n    0.002332672982335701,\r\n    0.0011663364911678506,\r\n    0.0005831682455839253 //28\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\nfunction zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        }\r\n        else {\r\n            console.log(\"invalid zoom level provided: \" + zoomLevel);\r\n            return undefined;\r\n        }\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\nexports.zoomToResolution = zoomToResolution;\r\nnm.zoomToResolution = zoomToResolution;\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\nfunction resolutionToZoom(resolution) {\r\n    for (var i = 0; i < _zoomResLookup.length; i++) {\r\n        if (resolution >= _zoomResLookup[i]) {\r\n            return i;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.resolutionToZoom = resolutionToZoom;\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n/***/ }),\n/* 15 */,\n/* 16 */,\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar nm = provide_1.default('collections');\r\nvar $ = __webpack_require__(1);\r\nvar LayerGroup = (function () {\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    function LayerGroup(groupConfig, parent) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\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        }\r\n        else {\r\n            this.groupId = makeGuid_1.default();\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     * @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    LayerGroup.prototype.addGroup = function (groupConfig, parents) {\r\n        var parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        }\r\n        else {\r\n            parent = 'root';\r\n        }\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        var parentGroup = this.allGroupLookup[parent];\r\n        var newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\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        return newGroup;\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    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {\r\n        var parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        }\r\n        else {\r\n            parent = 'root';\r\n        }\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        var parentGroup = this.allGroupLookup[parent];\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        this.layerParentLookup[newLayer.id] = parentGroup;\r\n    };\r\n    LayerGroup.prototype.getLegendHtml = function (legendId, options) {\r\n        var legendHtml = \"<ul id=\\\"\" + legendId + \"\\\" class=\\\"legend-container\\\">\";\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        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n        return legendHtml;\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    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n        var theHml = '';\r\n        var itemId = itemIds[0];\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            var 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        else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            var otherGroup = theGroup.groupGroupsLookup[itemId];\r\n            theHml += \"<li>\";\r\n            theHml += \"<div id=\\\"\" + otherGroup.groupId + \"-legend-layer-div\\\" \" +\r\n                (\"class=\\\"legend-layer-group  \" + layerDivClasses.join(' ') + \"\\\">\");\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            }\r\n            else {\r\n                theHml += \"<label title=\\\"Click arrow to expand or collapse\\\">\" + otherGroup.groupName + \"</label>\";\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            //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        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    };\r\n    return LayerGroup;\r\n}());\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nvar LayerLegend = (function () {\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    function LayerLegend(legendItems, divId, options) {\r\n        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {\r\n            var i = legendItems_1[_i];\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n        options = options || {};\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        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove_1.default.checkInit();\r\n        }\r\n        this.$divElement = $('#' + divId);\r\n        this._legendItems = legendItems;\r\n        this.layerGroup = new LayerGroup();\r\n        this._buildTree(legendItems);\r\n        this.legendId = makeGuid_1.default();\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {\r\n            var l = _b[_a];\r\n            l.applyCollapse();\r\n        }\r\n        var _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_1.default.checkInit();\r\n            mapMove_1.default.addCallback(function (ext, zoom, evt) {\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {\r\n                        var lyr = _a[_i];\r\n                        var $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        }\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        // <editor-fold desc=\"add event listeners\">\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            var legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            }\r\n            else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            var lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\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        this.$divElement.find('.layer-group-expander').click(function () {\r\n            var $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n            $this.siblings('ul').slideToggle();\r\n            if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            }\r\n            else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\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     * @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    LayerLegend.prototype._buildTree = function (legendItems, parents) {\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n        var oneItem = legendItems[0];\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        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            var groupItem = legendItems[0];\r\n            var newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        }\r\n        else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            var layerItem = legendItems[0];\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    };\r\n    return LayerLegend;\r\n}());\r\nnm.LayerLegend = LayerLegend;\r\nexports.default = LayerLegend;\r\n\n\n/***/ }),\n/* 18 */,\n/* 19 */,\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nvar LayerBaseVector = (function (_super) {\r\n    __extends(LayerBaseVector, _super);\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    function LayerBaseVector(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        options = options;\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        _this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n        if (_this.visible) {\r\n            _this._autoLoad = true;\r\n        }\r\n        else {\r\n            _this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\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        if (options.mapMoveObj) {\r\n            _this._mapMove = options.mapMoveObj;\r\n        }\r\n        else {\r\n            _this._mapMove = _this._onDemand ? mapMove_1.default : undefined;\r\n        }\r\n        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () { return {}; };\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        _this._source = new ol.source.Vector();\r\n        _this._olLayer = new ol.layer.Vector({\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        _this.olLayer.setZIndex(_this._zIndex);\r\n        _this._projectionMap = null;\r\n        _this._projection4326 = new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        return _this;\r\n    }\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    LayerBaseVector.prototype.addFeatures = function (featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\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    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\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        return this.visible;\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    LayerBaseVector.prototype.mapMoveMakeGetParams = function (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     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    LayerBaseVector.prototype.mapMoveCallback = function (d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    };\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    LayerBaseVector.prototype.clear = function () {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBaseVector.prototype, \"onDemandDelay\", {\r\n        /**\r\n         * get on demand delay in miliseconds\r\n         */\r\n        get: function () {\r\n            return this._onDemandDelay;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"autoLoad\", {\r\n        /**\r\n         * get if the layer is autoloaded\r\n         */\r\n        get: function () {\r\n            return this._autoLoad;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"style\", {\r\n        /**\r\n         * get the style definition\r\n         */\r\n        get: function () {\r\n            return this._style;\r\n        },\r\n        /**\r\n         * set the style\r\n         * @param style - the style or function\r\n         */\r\n        set: function (style) {\r\n            this._style = style;\r\n            this.olLayer.setStyle(this._style);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapCrs\", {\r\n        /**\r\n         * get the map CRS if it is defined by the map move object\r\n         */\r\n        get: function () {\r\n            return this.mapProj == null ? null : this.mapProj.getCode();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapProj\", {\r\n        get: function () {\r\n            if (this._projectionMap != null) {\r\n                return this._projectionMap;\r\n            }\r\n            if (this._mapMove) {\r\n                this._projectionMap = this._mapMove.map.getView().getProjection();\r\n                return this._projectionMap;\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapMove\", {\r\n        /**\r\n         * get the map move object\r\n         * @type {MapMoveCls|*}\r\n         */\r\n        get: function () {\r\n            return this._mapMove;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"mapMoveParams\", {\r\n        /**\r\n         * map move params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._mapMoveParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"visible\", {\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * Set the layer visibility\r\n         * @type {boolean}\r\n         * @override\r\n         */\r\n        set: function (visibility) {\r\n            _super.prototype.setVisible.call(this, visibility);\r\n            if (this._onDemand) {\r\n                this.mapMove.triggerLyrLoad(this);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"source\", {\r\n        /**\r\n         * get the layer vector source\r\n         * @override\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"features\", {\r\n        /**\r\n         * array of ol features\r\n         */\r\n        get: function () {\r\n            return this.source.getFeatures();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBaseVector.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getOlLayer.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBaseVector.prototype.setZIndex = function (newZ) {\r\n        this.olLayer.setZIndex(newZ);\r\n    };\r\n    return LayerBaseVector;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerBaseVector = LayerBaseVector;\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexports.default = LayerBaseVector;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 10/3/2016.\r\n */\r\nvar ol = __webpack_require__(2);\r\nexports.proj4326 = new ol.proj.Projection({ code: 'EPSG:4326' });\r\nexports.proj3857 = new ol.proj.Projection({ code: 'EPSG:3857' });\r\nexports.proj3070 = new ol.proj.Projection({ code: 'EPSG:3070' });\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar colors = __webpack_require__(33);\r\nvar provide_1 = __webpack_require__(0);\r\nvar LayerItsInventory_1 = __webpack_require__(30);\r\nvar nm = provide_1.default('collections');\r\nvar 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\nvar ItsLayerCollection = (function () {\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    function ItsLayerCollection(theMap, exclude) {\r\n        this._map = theMap;\r\n        this._layers = [];\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n        for (var i = 0; i < itsConfig.length; i++) {\r\n            var lyrConfig = itsConfig[i];\r\n            var addLayer = true;\r\n            for (var 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            if (addLayer) {\r\n                var inventLyr = new LayerItsInventory_1.default(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n    Object.defineProperty(ItsLayerCollection.prototype, \"layers\", {\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: function () {\r\n            return this._layers;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return ItsLayerCollection;\r\n}());\r\nexports.ItsLayerCollection = ItsLayerCollection;\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexports.default = ItsLayerCollection;\r\n\n\n/***/ }),\n/* 23 */,\n/* 24 */,\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBaseVector_1 = __webpack_require__(20);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar proj = __webpack_require__(21);\r\nvar projections_1 = __webpack_require__(21);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nvar LayerBaseVectorGeoJson = (function (_super) {\r\n    __extends(LayerBaseVectorGeoJson, _super);\r\n    /**\r\n     * @param {string|undefined|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    function LayerBaseVectorGeoJson(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = this;\r\n        url = typeof url == 'string' ? url : '';\r\n        _this = _super.call(this, url, options) || this;\r\n        _this._geoJsonFormat = new ol.format.GeoJSON();\r\n        _this._transform = options.transform || {};\r\n        _this._transform.dataProjection = _this._transform.dataProjection || proj.proj4326;\r\n        _this._transform.featureProjection = _this._transform.featureProjection || projections_1.proj3857;\r\n        if (_this.autoLoad || _this.visible) {\r\n            _this._load();\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) {\r\n        this.source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n    };\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    LayerBaseVectorGeoJson.prototype._load = function () {\r\n        var _this = this;\r\n        if (_super.prototype._load.call(this)) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this._params, function (d) {\r\n            _this.addFeatures(d);\r\n            _this.loadCallback(_this);\r\n        }, 'json').fail(function () {\r\n            this._loaded = false;\r\n        });\r\n        return false;\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    LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) {\r\n        _super.prototype.mapMoveCallback.call(this, d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, { featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection }));\r\n    };\r\n    return LayerBaseVectorGeoJson;\r\n}(LayerBaseVector_1.LayerBaseVector));\r\nexports.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexports.default = LayerBaseVectorGeoJson;\r\n\n\n/***/ }),\n/* 29 */,\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar LayerBaseVectorGeoJson_1 = __webpack_require__(28);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n    //make sure one and only one configuration is defined;\r\n    var configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\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    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n        configCount++;\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        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n        // set the width if not defined\r\n        for (var 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        configCount++;\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 * @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) {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n    if (itsIcon) {\r\n        return new ol.style.Style({\r\n            image: new ol.style.Icon({\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    }\r\n    else if (itsIconConfig) {\r\n        return function (feature) {\r\n            var symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                var thisProp = itsIconConfig.iconArray[i];\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            return [new ol.style.Style({\r\n                    image: new ol.style.Icon({\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) {\r\n            var symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            var colr = itsLineConfig.defaultColor || 'red';\r\n            var width = itsLineConfig.defaultWidth || 5;\r\n            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                var thisProp = itsLineConfig.lineArray[i];\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            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    }\r\n    else {\r\n        return undefined;\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    var iconHeight = 17;\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n    if (itsIcon) {\r\n        return \"<img src=\\\"\" + (_iconUrlRoot + itsIcon) + \"\\\" class=\\\"legend-layer-icon\\\" height=\\\"\" + iconHeight + \"\\\">\";\r\n    }\r\n    else if (itsLineStyle) {\r\n        return \"<hr style=\\\"height: \" + itsLineStyle.width + \"px; background-color: \" + itsLineStyle.color + \"\\\">\";\r\n    }\r\n    else if (itsIconConfig) {\r\n        var outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) {\r\n            var a = _a[_i];\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        return outHtml;\r\n    }\r\n    else if (itsLineConfig) {\r\n        var outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) {\r\n            var ls = _c[_b];\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        return outHtml;\r\n    }\r\n    else {\r\n        return '';\r\n    }\r\n}\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nvar LayerItsInventory = (function (_super) {\r\n    __extends(LayerItsInventory, _super);\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    function LayerItsInventory(options) {\r\n        var _this = this;\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n        var addToLegend = '';\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(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);\r\n            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);\r\n        }\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, { format: 'JSON', resource: options.itsType });\r\n        _this = _super.call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options) || this;\r\n        //add any additional content to the legend\r\n        _this.addLegendContent(addToLegend);\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n        if (options.addPopup) {\r\n            mapPopup_1.default.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        return _this;\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    LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {\r\n        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);\r\n        var lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapProj, this._projection4326);\r\n        var lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        var upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapProj, this._projection4326);\r\n        var upperRightCoordinates = upperRight.getCoordinates();\r\n        $.extend(this.mapMoveParams, {\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    return LayerItsInventory;\r\n}(LayerBaseVectorGeoJson_1.default));\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexports.default = LayerItsInventory;\r\n\n\n/***/ }),\n/* 31 */,\n/* 32 */,\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar chk = __webpack_require__(9);\r\nvar nm = provide_1.default('util.colors');\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    var hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n    return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\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\nfunction rgb2hex(rgb) {\r\n    var rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\nexports.rgb2hex = rgb2hex;\r\nnm.rgb2hex = rgb2hex;\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\nfunction hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + alphaVal + \")\";\r\n    }\r\n    else {\r\n        return \"rgba(\" + r + \",\" + g + \",\" + b + \")\";\r\n    }\r\n}\r\nexports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\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\nfunction rgbToRgba(rgb, alpha) {\r\n    var 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    return pieces.join(',');\r\n}\r\nexports.rgbToRgba = rgbToRgba;\r\nnm.rgbToRgba = rgbToRgba;\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 * 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\nfunction makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n    return function (theVal) {\r\n        var r, g, b;\r\n        var ratio;\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n        var percent = (theVal - minVal) / (maxVal - minVal);\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        }\r\n        else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        }\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        }\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        }\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        }\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 = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\nexports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\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\nfunction makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n    return function (theVal) {\r\n        var zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        }\r\n        else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n        return grd(zScore);\r\n    };\r\n}\r\nexports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n\n\n/***/ }),\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ItsLayerCollection_1 = __webpack_require__(22);\r\nvar LayerLegend_1 = __webpack_require__(17);\r\nvar quickMap_1 = __webpack_require__(7);\r\nvar map = quickMap_1.default();\r\nwindow['map'] = map;\r\nvar itsLayerCollection = new ItsLayerCollection_1.default(map);\r\nvar 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\nvar legend = new LayerLegend_1.default(layerArray, 'legend-container', {});\r\nconsole.log('it works');\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// itsMap.js"," \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 95f473b09da6d84b9b8b","/**\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\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 = options || {} as quickMapOptions;\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\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|undefined|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, 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\r\n        this.source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\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\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        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 '../collections/ItsLayerCollection';\r\nimport LayerLegend from '../collections/LayerLegend';\r\nimport quickMap from '../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// ../../src/_test/itsMap.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/my_little_test.js b/test-html/js/my_little_test.js
index f4dd5118a56c44fa670316e91681abc576d01268..0d541f52983ba4d100148aae7c745add173425af 100644
--- a/test-html/js/my_little_test.js
+++ b/test-html/js/my_little_test.js
@@ -1,460 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 0:
-/*!**************************************!*\
-  !*** ./dist/_test/my_little_test.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	// let g = new
-	var media_control_1 = __webpack_require__(/*! ../domUtil/media-control */ 19);
-	//
-	//
-	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');
-	//
-
-
-/***/ },
-
-/***/ 3:
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-
-/***/ 5:
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-
-/***/ 19:
-/*!***************************************!*\
-  !*** ./dist/domUtil/media-control.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/2/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var range_change_1 = __webpack_require__(/*! ./range-change */ 20);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-
-
-/***/ },
-
-/***/ 20:
-/*!**************************************!*\
-  !*** ./dist/domUtil/range-change.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ }
-
-/******/ });
+!function(e){function t(n){if(i[n])return i[n].exports;var a=i[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var i={};t.m=e,t.c=i,t.i=function(e){return e},t.d=function(e,i,n){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=38)}({0:function(e,t,i){"use strict";function n(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),i=window.gv,n=0;n<t.length;n++){void 0===i[t[n]]&&(i[t[n]]={}),i=i[t[n]]}return i}Object.defineProperty(t,"__esModule",{value:!0}),n("util"),window.gv.util.provide=n,t.default=n},1:function(e,t){e.exports=$},18:function(e,t,i){"use strict";function n(e){var t=new Date(e),i=t.toLocaleTimeString().split(" "),n=i[0].split(":");return n=n.slice(0,2),t.toLocaleDateString()+"<br>"+n.join(":")+" "+i[1]}Object.defineProperty(t,"__esModule",{value:!0});var a=i(0),l=i(19),s=i(1),o=a.default("domUtil"),r=function(){function e(e,t,i){void 0===t&&(t=function(){}),void 0===i&&(i={});var n=this;i.min="number"==typeof i.min?i.min:0,i.max="number"==typeof i.max?i.max:100,i.val="number"==typeof i.val?i.val:0,i.step="number"==typeof i.step?i.step:5,i.playInterval="number"==typeof i.playInterval?i.playInterval:500,i.showAsDate="boolean"==typeof i.showAsDate&&i.showAsDate,"string"==typeof e?this._container=s("#"+e):void 0!==e.style?this._container=s(e):this._container=e,this._container.addClass("media-control-container"),this._playInterval=i.playInterval,this._changeFunc=t,this._showAsDate=i.showAsDate,this._currentValue=void 0,this._min=void 0,this._max=void 0,this._step=void 0,this._playing=!1,this._container.append('<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>');var a=this._container.find(".media-play");this._$btnStop=this._container.find(".media-stop");var o=this._container.find(".media-ahead"),r=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(i.min,i.max,i.val,i.step),l.rangeChange(this._$slider,function(e){n.currentValue=e},100);var u=this;a.click(function(){s(this).addClass("media-disabled"),u._$btnStop.removeClass("media-disabled"),o.addClass("media-locked"),r.addClass("media-locked"),u._$slider.prop("disabled",!0),u._playing=!0,u._interval=setInterval(function(){u.currentValue+=u._step},u._playInterval)}),this._$btnStop.click(function(){clearInterval(u._interval),s(this).addClass("media-disabled"),a.removeClass("media-disabled"),o.removeClass("media-locked"),r.removeClass("media-locked"),u._$slider.prop("disabled",!1),u._playing=!1}),o.click(function(){u.currentValue=u.currentValue+u._step}),r.click(function(){u.currentValue=u.currentValue-u._step})}return e.prototype.stopPlaying=function(){this._playing&&this._$btnStop.trigger("click")},Object.defineProperty(e.prototype,"playing",{get:function(){return this._playing},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"min",{get:function(){return this._min},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"max",{get:function(){return this._max},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"step",{get:function(){return this._step},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"currentValue",{get:function(){return this._currentValue},set:function(e){e>this._max?e=this._min:e<this._min&&(e=this._max),this._currentValue=e,this._$slider.val(this._currentValue.toFixed(2)),this._showAsDate?this._$valLabelVal.html(n(this.currentValue)):this._$valLabelVal.html(this.currentValue.toString()),this._changeFunc(e)},enumerable:!0,configurable:!0}),e.prototype.setMinMaxValueStep=function(e,t,i,a){this._min=e,this._max=t,i="number"==typeof i?i:e,a="number"==typeof a?a:(t-e)/20,this._currentValue=i,this._step=a,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()),this._showAsDate?(this._$valLabelMin.html(n(this._min)),this._$valLabelVal.html(n(this.currentValue)),this._$valLabelMax.html(n(this._max))):(this._$valLabelMin.html(this._min.toString()),this._$valLabelVal.html(this.currentValue.toString()),this._$valLabelMax.html(this._max.toString()))},Object.defineProperty(e.prototype,"changeFunction",{set:function(e){this._changeFunc=e},enumerable:!0,configurable:!0}),e}();t.MediaControl=r,o.MediaControl=r},19:function(e,t,i){"use strict";function n(e,t){var i=parseFloat(this.value),n=parseFloat(this.min),a=parseFloat(this.max);a-i<parseFloat(this.step)&&(i=a);var s=(i-n)/(a-n);"number"==typeof l&&i==l||(l=i,e(i,s,t))}function a(e,t,i){return i="number"==typeof i?i:75,e.mouseenter(function(){r=!0}),e.mouseleave(function(){r=!1,u=!1}),e.mousedown(function(){u=!0}),e.mouseup(function(){u=!1}),e.mousemove(function(e){if(r&&u&&(p=!0,l!=this.value)){l=this.value,null!=c&&clearTimeout(c);var a=this;c=setTimeout(function(){n.call(a,t,e),c=null},i)}}),e.keyup(function(e){37!=e.keyCode&&39!=e.keyCode||n.call(this,t,e)}),e.change(function(e){if(p)return void(p=!1);n.call(this,t,e)}),this}Object.defineProperty(t,"__esModule",{value:!0});var l,s=i(0),o=s.default("domUtil"),r=!1,u=!1,c=null,p=!1;t.rangeChange=a,o.rangeChange=a},38:function(e,t,i){"use strict";function n(e){void 0===e&&(e=1),console.log(e,"one")}Object.defineProperty(t,"__esModule",{value:!0});var a=i(18);console.log("eat this fish"),console.log("eat this fish"),console.log("eat this bird"),console.log("i am here5"),n(1);new a.MediaControl("map")}});
 //# sourceMappingURL=my_little_test.js.map
\ No newline at end of file
diff --git a/test-html/js/my_little_test.js.map b/test-html/js/my_little_test.js.map
index 786393a947733f24be198cd743bfd627706210c3..455dddeb46779ea34b6c0bbe4a884e7d5143ca76 100644
--- a/test-html/js/my_little_test.js.map
+++ b/test-html/js/my_little_test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3***","webpack:///./src/_test/my_little_test.ts","webpack:///./src/util/provide.ts?5c82**","webpack:///external \"$\"?57aa**","webpack:///./src/domUtil/media-control.ts?660c","webpack:///./src/domUtil/range-change.ts?b7cd"],"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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","import ol = require('custom-ol');\r\n// let g = new\r\n\r\n\r\n\r\n\r\nimport {MediaControl} from '../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// ./src/_test/my_little_test.ts","/**\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 = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///my_little_test.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d*****","webpack:///../../src/util/provide.ts?0b57*****","webpack:///external \"$\"?57aa*****","webpack:///../../src/domUtil/media-control.ts?92ae","webpack:///../../src/domUtil/range-change.ts?df8d","webpack:///../../src/_test/my_little_test.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","provide","namespace","window","parts","split","nameSpace","length","util","default","1","$","18","timeToLocalDateString","tm","Date","p1","toLocaleTimeString","p2","slice","toLocaleDateString","join","provide_1","range_change_1","nm","MediaControl","element","changeFunc","mediaConfig","_this","this","min","max","val","step","playInterval","showAsDate","_container","addClass","_playInterval","_changeFunc","_showAsDate","_currentValue","undefined","_min","_max","_step","_playing","append","btnPlay","find","_$btnStop","btnAhead","btnBack","_$slider","_$valLabelMin","_$valLabelVal","_$valLabelMax","setMinMaxValueStep","rangeChange","newVal","currentValue","___this","click","removeClass","prop","_interval","setInterval","clearInterval","stopPlaying","trigger","set","newValue","toFixed","html","toString","newMin","newMax","newStep","newFunc","19","triggerCallback","callback","evt","parseFloat","percent","lastVal","$slider","changeTimeout","mouseenter","mouseIn","mouseleave","mouseDown","mousedown","mouseup","mousemove","dragged","timeout","clearTimeout","setTimeout","keyup","keyCode","change","38","me","eat","console","log","media_control_1"],"mappings":"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","file":"my_little_test.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar range_change_1 = __webpack_require__(19);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('domUtil');\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\nfunction timeToLocalDateString(tm) {\r\n    \"use strict\";\r\n    var d = new Date(tm);\r\n    var p1 = d.toLocaleTimeString().split(' ');\r\n    var p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\nvar MediaControl = (function () {\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    function MediaControl(element, changeFunc, mediaConfig) {\r\n        if (changeFunc === void 0) { changeFunc = function () { return; }; }\r\n        if (mediaConfig === void 0) { mediaConfig = {}; }\r\n        var _this = this;\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        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        }\r\n        else {\r\n            this._container = element;\r\n        }\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n        this._showAsDate = mediaConfig.showAsDate;\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        var htmlStr = '<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        this._container.append(htmlStr);\r\n        // let btnPause = this._container.find('.media-pause');\r\n        var btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        var btnAhead = this._container.find('.media-ahead');\r\n        var btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\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        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);\r\n        var ___this = this;\r\n        btnPlay.click(function () {\r\n            var $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            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            var $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        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n    MediaControl.prototype.stopPlaying = function () {\r\n        if (this._playing) {\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    };\r\n    Object.defineProperty(MediaControl.prototype, \"playing\", {\r\n        get: function () {\r\n            return this._playing;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"min\", {\r\n        get: function () {\r\n            return this._min;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"max\", {\r\n        get: function () {\r\n            return this._max;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"step\", {\r\n        get: function () {\r\n            return this._step;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MediaControl.prototype, \"currentValue\", {\r\n        get: function () {\r\n            return this._currentValue;\r\n        },\r\n        set: function (newValue) {\r\n            if (newValue > this._max) {\r\n                newValue = this._min;\r\n            }\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            if (this._showAsDate) {\r\n                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            }\r\n            else {\r\n                this._$valLabelVal.html(this.currentValue.toString());\r\n            }\r\n            this._changeFunc(newValue);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\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        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        }\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    Object.defineProperty(MediaControl.prototype, \"changeFunction\", {\r\n        /**\r\n         *\r\n         * @param {mediaCallback} newFunc the callback on change\r\n         */\r\n        set: function (newFunc) {\r\n            this._changeFunc = newFunc;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return MediaControl;\r\n}());\r\nexports.MediaControl = MediaControl;\r\nnm.MediaControl = MediaControl;\r\n\n\n/***/ }),\n\n/***/ 19:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('domUtil');\r\nvar mouseIn = false;\r\nvar mouseDown = false;\r\nvar timeout = null;\r\nvar dragged = false;\r\nvar lastVal;\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\nfunction triggerCallback(callback, evt) {\r\n    \"use strict\";\r\n    var val = parseFloat(this.value);\r\n    var min = parseFloat(this.min);\r\n    var max = parseFloat(this.max);\r\n    var step = parseFloat(this.step);\r\n    if (max - val < step) {\r\n        val = max;\r\n    }\r\n    var percent = (val - min) / (max - min);\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 * 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\nfunction rangeChange($slider, callback, changeTimeout) {\r\n    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\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        dragged = true;\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n        var _this = this;\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n        }, changeTimeout);\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    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n    return this;\r\n}\r\nexports.rangeChange = rangeChange;\r\nnm.rangeChange = rangeChange;\r\n\n\n/***/ }),\n\n/***/ 38:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// let g = new\r\nvar media_control_1 = __webpack_require__(18);\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// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\nconsole.log('i am here5');\r\nfunction me(eat) {\r\n    if (eat === void 0) { eat = 1; }\r\n    console.log(eat, 'one');\r\n}\r\nme(1);\r\nvar control = new media_control_1.MediaControl('map');\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\n/******/ });\n\n\n// WEBPACK FOOTER //\n// my_little_test.js"," \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 95f473b09da6d84b9b8b","/**\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 '../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// ../../src/_test/my_little_test.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/range_media.js b/test-html/js/range_media.js
index bd98d3687e688e7ea7388068014edb692c64f0e5..06b7f29610836434887217029d9096dec6389983 100644
--- a/test-html/js/range_media.js
+++ b/test-html/js/range_media.js
@@ -1,215 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 0:
-/*!***********************************!*\
-  !*** ./dist/_test/range_media.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 10/10/2016.
-	 */
-	"use strict";
-	var day_range_1 = __webpack_require__(/*! ../domUtil/day-range */ 32);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	var dayRange = new day_range_1.DayRange($('#day-range'), 10);
-
-
-/***/ },
-
-/***/ 3:
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-
-/***/ 5:
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-
-/***/ 32:
-/*!***********************************!*\
-  !*** ./dist/domUtil/day-range.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	// import 'jquery-ui';
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = DayRange;
-
-
-/***/ }
-
-/******/ });
+!function(t){function e(n){if(a[n])return a[n].exports;var i=a[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var a={};e.m=t,e.c=a,e.i=function(t){return t},e.d=function(t,a,n){e.o(t,a)||Object.defineProperty(t,a,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(a,"a",a),a},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=39)}({0:function(t,e,a){"use strict";function n(t){void 0===window.gv&&(window.gv={});for(var e=t.split("."),a=window.gv,n=0;n<e.length;n++){void 0===a[e[n]]&&(a[e[n]]={}),a=a[e[n]]}return a}Object.defineProperty(e,"__esModule",{value:!0}),n("util"),window.gv.util.provide=n,e.default=n},1:function(t,e){t.exports=$},15:function(t,e){t.exports=jquery-ui},24:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(0),i=a(1);a(15);var r=n.default("domUtil"),s=function(){function t(t,e){this._workingDayRange=e-1,t.append('<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;">'),this._$startDate=i("#start-date"),this._$endDate=i("#end-date"),this._$startDate.datepicker(),this._$endDate.datepicker(),this._startDate=null,this._endDate=null;var a=new Date;a.setHours(0,0,0,0);var n=new Date(a.getTime());n.setDate(n.getDate()+e),n.setHours(23,59,59,0),this._maxDateRange=n.getTime()-a.getTime();var r=this;this._$startDate.change(function(){r.startDate=this.value}),this._$endDate.change(function(){r.endDate=this.value}),this.endDate=new Date}return Object.defineProperty(t.prototype,"startDate",{get:function(){return this._startDate},set:function(t){if("string"==typeof t&&(t=new Date(t)),this._startDate=t,this._startDate.setHours(0,0,0,0),this._$startDate.val(this._startDate.toLocaleDateString()),null==this.endDate||this._endDate.getTime()-this._startDate.getTime()>this._maxDateRange||this._endDate.getTime()-this._startDate.getTime()<864e5){var e=new Date(this._startDate.getTime());e.setDate(e.getDate()+this._workingDayRange),this.endDate=new Date(e.getTime())}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"endDate",{get:function(){return this._endDate},set:function(t){if("string"==typeof t&&(t=new Date(t)),this._endDate=t,this._endDate.setHours(23,59,59,0),this._$endDate.val(this._endDate.toLocaleDateString()),null==this._startDate||this._endDate.getTime()-this.startDate.getTime()>this._maxDateRange||this._endDate.getTime()-this._startDate.getTime()<864e5){var e=new Date(this._endDate.getTime());e.setDate(e.getDate()-this._workingDayRange),this.startDate=new Date(e.getTime())}},enumerable:!0,configurable:!0}),t}();e.DayRange=s,r.DayRange=s,e.default=s},39:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(24),i=a(1);new n.DayRange(i("#day-range"),10)}});
 //# sourceMappingURL=range_media.js.map
\ No newline at end of file
diff --git a/test-html/js/range_media.js.map b/test-html/js/range_media.js.map
index 47397ed1d0406fd92c51ffc183183bd3fd315e99..da3bc54a9de9b2e4dc957d966d619d0810b56736 100644
--- a/test-html/js/range_media.js.map
+++ b/test-html/js/range_media.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 45d1bf7aeb16305f225f","webpack:///./src/_test/range_media.ts","webpack:///./src/util/provide.ts","webpack:///external \"$\"","webpack:///./src/domUtil/day-range.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 45d1bf7aeb16305f225f","/**\r\n * Created by gavorhes on 10/10/2016.\r\n */\r\n\r\nimport {DayRange} from '../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// ./src/_test/range_media.ts","/**\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 = 5\n// module chunks = 0 2 3 4 5 7 8","import provide from '../util/provide';\r\nimport $ = require('jquery');\r\n// import 'jquery-ui';\r\n\r\n\r\nlet nm = provide('domUtil');\r\n\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\n\r\nexport default DayRange;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/domUtil/day-range.ts"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///range_media.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d****","webpack:///../../src/util/provide.ts?0b57****","webpack:///external \"$\"?57aa****","webpack:///external \"jquery-ui\"?42af*","webpack:///../../src/domUtil/day-range.ts","webpack:///../../src/_test/range_media.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","provide","namespace","window","parts","split","nameSpace","length","util","default","1","$","15","jquery","ui","24","provide_1","nm","DayRange","jQueryRef","dayRange","this","_workingDayRange","append","_$startDate","_$endDate","datepicker","_startDate","_endDate","dte1","Date","setHours","dte2","getTime","setDate","getDate","_maxDateRange","_this","change","startDate","endDate","set","val","toLocaleDateString","tmpDate","39","day_range_1"],"mappings":"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","file":"range_media.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = jquery-ui;\n\n/***/ }),\n\n/***/ 24:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar $ = __webpack_require__(1);\r\n__webpack_require__(15);\r\nvar nm = provide_1.default('domUtil');\r\nvar DayRange = (function () {\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    function DayRange(jQueryRef, dayRange) {\r\n        this._workingDayRange = dayRange - 1;\r\n        var 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        jQueryRef.append(pickerHtml);\r\n        this._$startDate = $('#start-date');\r\n        this._$endDate = $('#end-date');\r\n        this._$startDate.datepicker();\r\n        this._$endDate.datepicker();\r\n        this._startDate = null;\r\n        this._endDate = null;\r\n        var dte1 = new Date();\r\n        dte1.setHours(0, 0, 0, 0);\r\n        var 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        var _this = this;\r\n        //add event listeners\r\n        this._$startDate.change(function () {\r\n            _this.startDate = this.value;\r\n        });\r\n        this._$endDate.change(function () {\r\n            _this.endDate = this.value;\r\n        });\r\n        // initialize\r\n        this.endDate = new Date();\r\n    }\r\n    Object.defineProperty(DayRange.prototype, \"startDate\", {\r\n        get: function () {\r\n            return this._startDate;\r\n        },\r\n        /**\r\n         *\r\n         * @param val\r\n         */\r\n        set: function (val) {\r\n            if (typeof val == 'string') {\r\n                val = new Date(val);\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            if (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                var 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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(DayRange.prototype, \"endDate\", {\r\n        get: function () {\r\n            return this._endDate;\r\n        },\r\n        set: function (val) {\r\n            if (typeof val == 'string') {\r\n                val = new Date(val);\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                var 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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return DayRange;\r\n}());\r\nexports.DayRange = DayRange;\r\nnm.DayRange = DayRange;\r\nexports.default = DayRange;\r\n\n\n/***/ }),\n\n/***/ 39:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 10/10/2016.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar day_range_1 = __webpack_require__(24);\r\nvar $ = __webpack_require__(1);\r\nvar dayRange = new day_range_1.DayRange($('#day-range'), 10);\r\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// range_media.js"," \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 95f473b09da6d84b9b8b","/**\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 = jquery-ui;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jquery-ui\"\n// module id = 15\n// module chunks = 0 4 5","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 '../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// ../../src/_test/range_media.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/reacttst.js b/test-html/js/reacttst.js
index 24b125d22b153aa0c0da13d1fc40c20322ae51dc..3e6e682ecb72171ad5ff77ab0f3feca6d4307d49 100644
--- a/test-html/js/reacttst.js
+++ b/test-html/js/reacttst.js
@@ -1,69 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!********************************!*\
-  !*** ./dist/_test/reacttst.js ***!
-  \********************************/
-/***/ 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")
-	// );
-	//
-
-
-/***/ }
-/******/ ]);
+!function(n){function r(e){if(t[e])return t[e].exports;var o=t[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=n,r.c=t,r.i=function(n){return n},r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e})},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},r.p="",r(r.s=40)}({40:function(n,r){}});
 //# sourceMappingURL=reacttst.js.map
\ No newline at end of file
diff --git a/test-html/js/reacttst.js.map b/test-html/js/reacttst.js.map
index c4c3301efb0fd1aeb3ff72b0a2025cc346504eb9..a0df837330a321023523245eb0e9068352f3541b 100644
--- a/test-html/js/reacttst.js.map
+++ b/test-html/js/reacttst.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3*****","webpack:///./src/_test/reacttst.tsx"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;ACtCA;;IAEG;AAEH,mCAAkC;AAClC,2CAA0C;AAC1C,GAAE;AACF,8CAA6C;AAC7C,GAAE;AACF,sDAAqD;AACrD,GAAE;AACF,oBAAmB;AACnB,0DAAyD;AACzD,0CAAyC;AACzC,MAAK;AACL,GAAE","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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\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// ./src/_test/reacttst.tsx"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///reacttst.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d******"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","40"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,MDMMC,GACA,SAAUxB,EAAQD","file":"reacttst.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/***/ 40:\n/***/ (function(module, exports) {\n\n/**\r\n * Created by gavorhes on 9/22/2016.\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\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// reacttst.js"," \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 95f473b09da6d84b9b8b"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/simple_map.js b/test-html/js/simple_map.js
index 3941777902cbea464d37c6c6a72361a1dc217684..eb2e0bcc798ff5f86750d839ac227c4a6c947027 100644
--- a/test-html/js/simple_map.js
+++ b/test-html/js/simple_map.js
@@ -1,2451 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/*!**********************************!*\
-  !*** ./dist/_test/simple_map.js ***!
-  \**********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 9/23/2016.
-	 */
-	var quickMap_1 = __webpack_require__(/*! ../olHelpers/quickMap */ 1);
-	var LayerEsriMapServer_1 = __webpack_require__(/*! ../layers/LayerEsriMapServer */ 24);
-	var LayerLegend_1 = __webpack_require__(/*! ../collections/LayerLegend */ 31);
-	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
-	];
-	var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
-
-
-/***/ },
-/* 1 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/quickMap.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var quickMapBase_1 = __webpack_require__(/*! ./quickMapBase */ 2);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var mapMove_1 = __webpack_require__(/*! ./mapMove */ 6);
-	var mapPopup_1 = __webpack_require__(/*! ./mapPopup */ 11);
-	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) {
-	    var m = quickMapBase_1.quickMapBase(options);
-	    mapMove_1.default.init(m);
-	    mapPopup_1.default.init(m);
-	    return m;
-	}
-	exports.quickMap = quickMap;
-	nm.quickMap = quickMap;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMap;
-
-
-/***/ },
-/* 2 */
-/*!****************************************!*\
-  !*** ./dist/olHelpers/quickMapBase.js ***!
-  \****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/15/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	    options = 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) {
-	    }
-	    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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = quickMapBase;
-
-
-/***/ },
-/* 3 */
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-/* 4 */
-/*!*********************!*\
-  !*** external "ol" ***!
-  \*********************/
-/***/ function(module, exports) {
-
-	module.exports = ol;
-
-/***/ },
-/* 5 */
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-/* 6 */
-/*!***********************************!*\
-  !*** ./dist/olHelpers/mapMove.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapMoveCls_1 = __webpack_require__(/*! ./mapMoveCls */ 7);
-	/**
-	 * The single map move object catch is that it is common to multimap pages
-	 * @type {MapMoveCls}
-	 */
-	exports.mapMove = new mapMoveCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapMove;
-
-
-/***/ },
-/* 7 */
-/*!**************************************!*\
-  !*** ./dist/olHelpers/mapMoveCls.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var checkDefined = __webpack_require__(/*! ../util/checkDefined */ 9);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapMoveCls;
-
-
-/***/ },
-/* 8 */
-/*!**********************************************!*\
-  !*** ./dist/olHelpers/mapInteractionBase.js ***!
-  \**********************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 12/8/2015.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapInteractionBase;
-
-
-/***/ },
-/* 9 */
-/*!***********************************!*\
-  !*** ./dist/util/checkDefined.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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 */
-/*!*******************************!*\
-  !*** ./dist/util/makeGuid.js ***!
-  \*******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ./provide */ 3);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = makeGuid;
-
-
-/***/ },
-/* 11 */
-/*!************************************!*\
-  !*** ./dist/olHelpers/mapPopup.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var mapPopupCls_1 = __webpack_require__(/*! ./mapPopupCls */ 12);
-	/**
-	 * The single popup object catch is that it is common to multimap pages
-	 * @type {MapPopupCls}
-	 */
-	exports.mapPopup = new mapPopupCls_1.default();
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = exports.mapPopup;
-
-
-/***/ },
-/* 12 */
-/*!***************************************!*\
-  !*** ./dist/olHelpers/mapPopupCls.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 11/3/2015.
-	 */
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	var mapInteractionBase_1 = __webpack_require__(/*! ./mapInteractionBase */ 8);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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) {
-	                }
-	                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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = MapPopupCls;
-
-
-/***/ },
-/* 13 */,
-/* 14 */,
-/* 15 */
-/*!**********************************!*\
-  !*** ./dist/layers/LayerBase.js ***!
-  \**********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var zoomResolutionConvert = __webpack_require__(/*! ../olHelpers/zoomResolutionConvert */ 16);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerBase;
-
-
-/***/ },
-/* 16 */
-/*!*************************************************!*\
-  !*** ./dist/olHelpers/zoomResolutionConvert.js ***!
-  \*************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/14/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	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;
-
-
-/***/ },
-/* 17 */,
-/* 18 */,
-/* 19 */,
-/* 20 */,
-/* 21 */,
-/* 22 */,
-/* 23 */
-/*!*****************************************!*\
-  !*** ./dist/olHelpers/esriToOlStyle.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 1/4/2016.
-	 */
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	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;
-
-
-/***/ },
-/* 24 */
-/*!*******************************************!*\
-  !*** ./dist/layers/LayerEsriMapServer.js ***!
-  \*******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	var __extends = (this && this.__extends) || function (d, b) {
-	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-	    function __() { this.constructor = d; }
-	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-	};
-	/**
-	 * Created by gavorhes on 12/7/2015.
-	 */
-	var LayerBase_1 = __webpack_require__(/*! ./LayerBase */ 15);
-	var esriToOl = __webpack_require__(/*! ../olHelpers/esriToOlStyle */ 23);
-	var mapPopup_1 = __webpack_require__(/*! ../olHelpers/mapPopup */ 11);
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var ol = __webpack_require__(/*! custom-ol */ 4);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerEsriMapServer;
-
-
-/***/ },
-/* 25 */,
-/* 26 */,
-/* 27 */,
-/* 28 */,
-/* 29 */,
-/* 30 */,
-/* 31 */
-/*!*****************************************!*\
-  !*** ./dist/collections/LayerLegend.js ***!
-  \*****************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/16/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var makeGuid_1 = __webpack_require__(/*! ../util/makeGuid */ 10);
-	var mapMove_1 = __webpack_require__(/*! ../olHelpers/mapMove */ 6);
-	var nm = provide_1.default('collections');
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = LayerLegend;
-
-
-/***/ }
-/******/ ]);
+!function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};t.m=e,t.c=o,t.i=function(e){return e},t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=41)}([function(e,t,o){"use strict";function n(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),o=window.gv,n=0;n<t.length;n++){void 0===o[t[n]]&&(o[t[n]]={}),o=o[t[n]]}return o}Object.defineProperty(t,"__esModule",{value:!0}),n("util"),window.gv.util.provide=n,t.default=n},function(e,t){e.exports=$},function(e,t){e.exports=ol},function(e,t,o){"use strict";function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}Object.defineProperty(t,"__esModule",{value:!0}),o(0).default("util").makeGuid=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(12);t.mapPopup=new n.default,t.default=t.mapPopup},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=n.default("olHelpers"),i=function(){function e(e){this._map=null,this._initialized=!1,this._subtype=e}return e.prototype.init=function(e){this._initialized||(this._map=e,this._initialized=!0)},Object.defineProperty(e.prototype,"map",{get:function(){return this._map},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"initialized",{get:function(){return this._initialized},enumerable:!0,configurable:!0}),e.prototype._checkInit=function(){if(!this.initialized){var e=this._subtype+" object not initialized";throw alert(e),console.log(e),e}},e.prototype.checkInit=function(){this._checkInit()},e}();t.MapInteractionBase=i,r.MapInteractionBase=i,t.default=i},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(11);t.mapMove=new n.default,t.default=t.mapMove},function(e,t,o){"use strict";function n(e){var t=r.quickMapBase(e);return l.default.init(t),a.default.init(t),t}Object.defineProperty(t,"__esModule",{value:!0});var r=o(13),i=o(0),l=o(6),a=o(4),s=i.default("olHelpers");t.quickMap=n,s.quickMap=n,t.default=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(14),r=o(0),i=o(3),l=o(1),a=r.default("layers"),s=function(){function e(e,t){if(void 0===t&&(t={}),t=t||{},"string"!=typeof e)throw"Invalid URL";this._url=e,this._params="object"==typeof t.params?t.params:{},this._legendCollapse="boolean"==typeof t.legendCollapse&&t.legendCollapse,this._legendCheckbox="boolean"!=typeof t.legendCheckbox||t.legendCheckbox,this.id=t.id||i.default(),this._name=t.name||"Unnamed Layer",this.animate=!1,this._opacity="number"==typeof t.opacity?t.opacity:1,this._opacity>1?this._opacity=1:this._opacity<0&&(this._opacity=0),this._visible="boolean"!=typeof t.visible||t.visible,this._source=void 0,this._olLayer=void 0,this._loaded=!1,this._maxResolution=n.zoomToResolution(t.minZoom),void 0!==this._maxResolution&&(this._maxResolution+=1e-5),this._minResolution=n.zoomToResolution(t.maxZoom),this._minZoom="number"==typeof t.minZoom?t.minZoom:void 0,this._maxZoom="number"==typeof t.maxZoom?t.maxZoom:void 0,this._zIndex="number"==typeof t.zIndex?t.zIndex:0,this.loadCallback="function"==typeof t.loadCallback?t.loadCallback:function(){},this._legendContent="",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>"):this._legendContent+='<label class="legend-layer-name">'+this.name+"</label>",this._$legendDiv=null,this._applyCollapseCalled=!1,this._addLegendContent("string"==typeof t.legendContent?t.legendContent:void 0)}return e.prototype._load=function(){return 1==this.loaded||(this._loaded=!0,!1)},e.prototype.getLegendDiv=function(){return'<div class="legend-layer-div" id="'+this.id+'-legend-layer-div">'+this._legendContent+"</div>"},e.prototype._addLegendContent=function(e){void 0===e&&(e=""),e.indexOf("<ul>")>-1&&(e='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'+e),this._legendContent+=e,this._$legendDiv=l("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0&&(this._$legendDiv.append(e),this.applyCollapse())},e.prototype.addLegendContent=function(e){this._addLegendContent(e)},e.prototype.applyCollapse=function(){if(this._applyCollapseCalled)return void console.log("collapse already applied");if(this._$legendDiv=l("#"+this.id+"-legend-layer-div"),this._$legendDiv.length>0){var e=this._$legendDiv.find(".legend-items-expander");e.length>0&&(this._applyCollapseCalled=!0,e.click(function(){var e=l(this);e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this._legendCollapse&&e.trigger("click"))}},e.prototype.refresh=function(){this.source&&this.source.refresh()},Object.defineProperty(e.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"animate",{get:function(){return this._animate},set:function(e){this._animate=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"legendContent",{get:function(){return this._legendContent},set:function(e){this._legendContent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"params",{get:function(){return this._params},set:function(e){this._params=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minResolution",{get:function(){return this._minResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxResolution",{get:function(){return this._maxResolution},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minZoom",{get:function(){return this._minZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxZoom",{get:function(){return this._maxZoom},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"visible",{get:function(){return this._visible},set:function(e){this.setVisible(e)},enumerable:!0,configurable:!0}),e.prototype.setVisible=function(e){this._visible=e,this.olLayer&&(this.olLayer.setVisible(this._visible),e&&!this._loaded&&this._load())},Object.defineProperty(e.prototype,"opacity",{get:function(){return this._opacity},set:function(e){this._opacity=e,this.olLayer&&this.olLayer.setOpacity(this._opacity)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"loaded",{get:function(){return this._loaded},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"source",{get:function(){return this.getSource()},enumerable:!0,configurable:!0}),e.prototype.getSource=function(){return this._source},Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(e){this._zIndex=e},enumerable:!0,configurable:!0}),e.prototype.setZIndex=function(e){},Object.defineProperty(e.prototype,"olLayer",{get:function(){return this.getOlLayer()},enumerable:!0,configurable:!0}),e.prototype.getOlLayer=function(){return this._olLayer},e}();t.LayerBase=s,a.LayerBase=s,t.default=s},function(e,t,o){"use strict";function n(e){return void 0===e||null===e}function r(e){return!n(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),l=i.default("util.checkDefined");t.undefinedOrNull=n,l.undefinedOrNull=n,t.definedAndNotNull=r,l.definedAndNotNull=r},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(8),i=o(16),l=o(4),a=o(0),s=o(2),p=o(1),u=a.default("layers"),c=function(e){function t(t,o){void 0===o&&(o={});var n=e.call(this,t,o)||this;return n._source=new s.source.TileArcGISRest({url:""==n.url?void 0:n.url,params:void 0===o.showLayers?void 0:{layers:"show:"+o.showLayers.join(",")}}),n._olLayer=new s.layer.Tile({source:n._source,visible:n.visible,opacity:n.opacity,minResolution:n._minResolution,maxResolution:n._maxResolution}),n._olLayer.setZIndex(n._zIndex),o.addPopup="boolean"==typeof o.addPopup&&o.addPopup,n._esriFormat=new s.format.EsriJSON,n._popupRequest=null,n.addLegendContent(),o.addPopup&&l.default.addMapServicePopup(n),n}return n(t,e),t.prototype.addLegendContent=function(t){var o=this,n=this.url;"/"!==n[n.length-1]&&(n+="/"),n+="legend?f=pjson&callback=?",p.get(n,{},function(t){var n=i.makeMapServiceLegend(t);e.prototype.addLegendContent.call(o,n)},"json")},t.prototype.getPopupInfo=function(e){if(this.visible){var t=this.url;"/"!=t[t.length-1]&&(t+="/"),t+="identify?callback=?";var o=this;null!=this._popupRequest&&this._popupRequest.abort(),this._popupRequest=p.get(t,e,function(e){for(var t=0,n=e.results;t<n.length;t++){var r=n[t],i='<table class="esri-popup-table">';for(var a in r.attributes)if(r.attributes.hasOwnProperty(a)){var s=r.attributes[a];if(null==s||"null"==s.toString().toLowerCase())continue;var p=a;p.length>14&&(p=p.slice(0,11)+"..."),i+="<tr><td>"+p+"</td><td>"+s+"</td></tr>"}i+="</table>",l.default.addMapServicePopupContent(o._esriFormat.readFeature(r),o,i,r.layerName)}},"json"),this._popupRequest.always(function(){o._popupRequest=null})}},Object.defineProperty(t.prototype,"source",{get:function(){return e.prototype.getSource.call(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"olLayer",{get:function(){return e.prototype.getOlLayer.call(this)},enumerable:!0,configurable:!0}),t}(r.LayerBase);t.LayerEsriMapServer=c,u.LayerEsriMapServer=c,t.default=c},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),i=o(9),l=o(0),a=o(3),s=o(1),p=l.default("olHelpers"),u=function(e){function t(){var t=e.call(this,"map move")||this;return t._arrLyrRequest=[],t._arrLyrTimeout=[],t._arrLayer=[],t._lookupLayer={},t._mapMoveCallbacks=[],t._mapMoveCallbacksLookup={},t._mapMoveCallbackDelays=[],t._mapMoveCallbackContext=[],t._mapMoveCallbackTimeout=[],t._mapExtent=void 0,t._zoomLevel=void 0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t),this.map.getView().on(["change:center","change:resolution"],function(e){o._updateMapExtent();for(var t=0;t<o._arrLayer.length;t++)o.triggerLyrLoad(o._arrLayer[t],t,e.type);for(var t=0;t<o._mapMoveCallbacks.length;t++)o.triggerMoveCallback(t,e.type)})},t.prototype._updateMapExtent=function(){var e=this.map.getView();this._zoomLevel=e.getZoom();var t=e.calculateExtent(this.map.getSize());this._mapExtent={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3]}},Object.defineProperty(t.prototype,"mapExtent",{get:function(){return this._mapExtent||this._updateMapExtent(),this._mapExtent},enumerable:!0,configurable:!0}),t.prototype.triggerLyrLoad=function(e,t,o){if(i.undefinedOrNull(e)&&i.undefinedOrNull(t))throw"need to define lyr or index";i.definedAndNotNull(e)&&i.undefinedOrNull(t)?t=this._arrLayer.indexOf(e):i.undefinedOrNull(e)&&i.definedAndNotNull(t)&&(e=this._arrLayer[t]),null!=this._arrLyrTimeout[t]&&(clearTimeout(this._arrLyrTimeout[t]),this._arrLyrTimeout[t]=null),null!=this._arrLyrRequest[t]&&4!=this._arrLyrRequest[t]&&(this._arrLyrRequest[t].abort(),this._arrLyrRequest[t]=null);var n=function(){};if(e.mapMoveBefore(this._zoomLevel,o)){e.mapMoveMakeGetParams(this._mapExtent,this._zoomLevel);var r=this;n=function(){function o(e,t){var o=this;this._arrLyrRequest[t]=s.get(e.url,e.mapMoveParams,function(t){e.mapMoveCallback(t),e.loadCallback()},"json").fail(function(t){"abort"!=t.statusText&&(console.log("failed"),console.log(e.url),console.log(e.mapMoveParams))}).always(function(){o._arrLyrTimeout[t]=null,o._arrLyrRequest[t]=null})}o.call(r,e,t)}}else e.clear();this._arrLyrTimeout[t]=setTimeout(n,e.onDemandDelay)},t.prototype.triggerMoveCallback=function(e,t,o){if(void 0===e&&void 0===o)throw"either the function index or the id must be defined";if("number"!=typeof e&&(e=this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[o])),e<0)return void console.log("function not found");null!=this._mapMoveCallbackTimeout[e]&&(clearTimeout(this._mapMoveCallbackTimeout[e]),this._mapMoveCallbackTimeout[e]=null);var n=this._mapMoveCallbackContext[e],r=this._mapMoveCallbacks[e],i=this,l=function(){null!==n?r.call(n,i._mapExtent,i._zoomLevel,t):r(i._mapExtent,i._zoomLevel,t)};this._mapMoveCallbackTimeout[e]=setTimeout(l,this._mapMoveCallbackDelays[e])},t.prototype.addVectorLayer=function(e,t){if(void 0===t&&(t=!0),this._arrLayer.indexOf(e)>-1)return void console.log("already added "+e.name+" to map move");this._checkInit(),this._arrLyrRequest.push(null),this._arrLyrTimeout.push(null),this._arrLayer.push(e),this._lookupLayer[e.id]=e,(t="boolean"!=typeof t||t)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerLyrLoad(e,this._arrLayer.length-1))},t.prototype.addCallback=function(e,t,o,n,r){if(this._mapMoveCallbacks.indexOf(e)>-1)return void console.log("this function already added to map move");this._checkInit(),r||(r=a.default()),this._mapMoveCallbacks.push(e),this._mapMoveCallbacksLookup[r]=r,this._mapMoveCallbackDelays.push("number"==typeof o?o:50),this._mapMoveCallbackContext.push(i.definedAndNotNull(t)?t:null),this._mapMoveCallbackTimeout.push(null),(n="boolean"!=typeof n||n)&&(void 0===this._mapExtent&&this._updateMapExtent(),this.triggerMoveCallback(this._mapMoveCallbacks.length-1))},t}(r.default);t.MapMoveCls=u,p.MapMoveCls=u,t.default=u},function(e,t,o){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var r=o(5),i=o(0),l=o(2),a=o(1),s=i.default("olHelpers"),p=function(){function e(e,t,o,n,r){this.feature=e,this.layer=t,this.layerIndex=o,this.selectionLayer=n,this.popupContent="",this.esriLayerName="string"==typeof r?r:void 0}return Object.defineProperty(e.prototype,"layerName",{get:function(){return"string"==typeof this.esriLayerName?this.esriLayerName:this.layer.name},enumerable:!0,configurable:!0}),e}();t.FeatureLayerProperties=p;var u=function(e){function t(){var t=e.call(this,"map popup")||this;return t._arrPopupLayerIds=[],t._arrPopupLayerNames=[],t._arrPopupLayers=[],t._arrPopupOlLayers=[],t._arrPopupContentFunction=[],t._$popupContainer=void 0,t._$popupContent=void 0,t._$popupCloser=void 0,t._popupOverlay=void 0,t._selectionLayers=[],t._selectionLayerLookup={},t._mapClickFunctions=[],t._popupChangedFunctions=[],t._esriMapServiceLayers=[],t._popupOpen=!1,t._popupCoordinate=null,t._passThroughLayerFeatureArray=[],t._currentPopupIndex=-1,t._popupContentLength=0,t}return n(t,e),t.prototype.init=function(t){var o=this;e.prototype.init.call(this,t);var n,r=this.map.getTarget();n=a("string"==typeof r?"#"+r:r),n.append('<div class="ol-popup"><span class="ol-popup-closer">X</span><div class="popup-content"></div></div>'),this._$popupContainer=n.find(".ol-popup"),this._$popupContent=n.find(".popup-content"),this._$popupCloser=n.find(".ol-popup-closer");var i=function(e){return l.easing.inAndOut(e)};return this._popupOverlay=new l.Overlay({element:this._$popupContainer[0],autoPan:!0,autoPanAnimation:{duration:250,source:t.getView().getCenter(),easing:i}}),this._map.addOverlay(this._popupOverlay),this._$popupCloser.click(function(e){o.closePopup()}),this._map.on("singleclick",function(e){if(o.closePopup(),o._popupCoordinate=e.coordinate,o._esriMapServiceLayers.length>0)for(var t={geometry:e.coordinate.join(","),geometryType:"esriGeometryPoint",layers:"all",sr:o._map.getView().getProjection().getCode().split(":")[1],mapExtent:o._map.getView().calculateExtent(o._map.getSize()).join(","),imageDisplay:o._map.getSize().join(",")+",96",returnGeometry:!0,tolerance:15,f:"pjson"},n=0,r=o._esriMapServiceLayers;n<r.length;n++){var i=r[n];i.getPopupInfo(t)}var l=o._featuresAtPixel(e.pixel);o._passThroughLayerFeatureArray=[],o._currentPopupIndex=-1;for(var a=0;a<l.length;a++){var s=l[a],p=s.feature.getProperties(),u=o._arrPopupContentFunction[s.layerIndex](p,o._$popupContent);u===!1||("string"==typeof u?(s.popupContent=u,o._passThroughLayerFeatureArray.push(s)):s.selectionLayer.getSource().addFeature(s.feature))}o._popupContentLength=o._passThroughLayerFeatureArray.length,o._currentPopupIndex=-1;var c='<div class="ol-popup-nav">';c+='<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>',c+='<span class="next-popup ol-popup-nav-arrow">&#9654;</span>',c+='<span class="current-popup-item-number" style="font-weight: bold;"></span>',c+="<span>&nbsp;of&nbsp;</span>",c+='<span class="popup-content-length" style="font-weight: bold;">'+o._popupContentLength+"</span>",c+="<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>",c+='<span class="current-popup-layer-name"></span>',c+="</div>",c+='<div class="ol-popup-inner">',c+="</div>",o._$popupContent.html(c),o._$popupContent.find(".previous-popup").click(function(){1!=o._popupContentLength&&(0==o._currentPopupIndex?o._currentPopupIndex=o._popupContentLength-1:o._currentPopupIndex--,o._triggerFeatSelect())});var d=o._$popupContent.find(".next-popup");d.click(function(){1==o._popupContentLength&&o._currentPopupIndex>-1||(o._currentPopupIndex==o._popupContentLength-1?o._currentPopupIndex=0:o._currentPopupIndex++,o._triggerFeatSelect())}),o._popupContentLength>0&&(d.trigger("click"),o._popupOverlay.setPosition(o._popupCoordinate),o._$popupContent.scrollTop(0),o._popupOpen=!0)}),this._map.on("pointermove",function(e){if(!e.dragging){var t=o.map.getEventPixel(e.originalEvent),n=o.map.hasFeatureAtPixel(t,function(e){for(var t=0,n=o._arrPopupOlLayers;t<n.length;t++){if(e==n[t])return!0}return!1});o.map.getTargetElement().style.cursor=n?"pointer":""}}),!0},t.prototype._triggerFeatSelect=function(){var e=this._$popupContent.find(".current-popup-item-number"),t=this._$popupContent.find(".ol-popup-inner"),o=this._$popupContent.find(".current-popup-layer-name");this.clearSelection();var n=this._passThroughLayerFeatureArray[this._currentPopupIndex];e.html((this._currentPopupIndex+1).toFixed()),o.html(n.layerName),t.html(n.popupContent),n.selectionLayer.getSource().addFeature(n.feature);for(var r=0,i=this._popupChangedFunctions;r<i.length;r++){(0,i[r])(this._$popupContent)}},t.prototype.addMapServicePopupContent=function(e,t,o,n){var r=new p(e,t,this._popupContentLength,this._selectionLayerLookup[t.id],n);r.popupContent=o,this._passThroughLayerFeatureArray.push(r),this._popupContentLength++,a(".popup-content-length").html(this._popupContentLength.toFixed()),this._popupOpen||(this._$popupContent.find(".next-popup").trigger("click"),this._popupOverlay.setPosition(this._popupCoordinate),this._$popupContent.scrollTop(0),this._popupOpen=!0)},t.prototype._featuresAtPixel=function(e){var t=this,o=[];return this.map.forEachFeatureAtPixel(e,function(e,n){var r=t._arrPopupOlLayers.indexOf(n);r>-1&&o.push(new p(e,t._arrPopupLayers[r],r,t._selectionLayers[r]))}),o},t.prototype.closePopup=function(){return this._checkInit(),this._popupOpen=!1,this._popupOverlay.setPosition(void 0),this._$popupCloser[0].blur(),this.clearSelection(),this._$popupContent.html(""),!1},t.prototype.addPopupChangedFunction=function(e){this._popupChangedFunctions.push(e)},t.prototype._addPopupLayer=function(e,t){this._checkInit(),t=t||{},t.color=t.color||"rgba(255,170,0,0.5)",t.width=t.width||10;var o;o=t.olStyle?t.olStyle:new l.style.Style({stroke:new l.style.Stroke({color:t.color,width:t.width}),image:new l.style.Circle({radius:7,fill:new l.style.Fill({color:t.color}),stroke:new l.style.Stroke({color:t.color,width:1})}),fill:new l.style.Fill({color:t.color})});var n=new l.layer.Vector({source:new l.source.Vector,style:o});return n.setZIndex(100),this._selectionLayers.push(n),this._selectionLayerLookup[e.id]=n,this.map.addLayer(n),n},t.prototype.addVectorPopup=function(e,t,o){var n=this._addPopupLayer(e,o);return this._arrPopupLayerIds.push(e.id),this._arrPopupLayerNames.push(e.name),this._arrPopupLayers.push(e),this._arrPopupOlLayers.push(e.olLayer),this._arrPopupContentFunction.push(t),n},t.prototype.removeVectorPopup=function(e){var t=this._arrPopupLayerIds.indexOf(e.id);t>-1&&(this._arrPopupLayerIds.splice(t,1),this._arrPopupLayerNames.splice(t,1),this._arrPopupLayers.splice(t,1),this._arrPopupOlLayers.splice(t,1),this._arrPopupContentFunction.splice(t,1),this._selectionLayers.splice(t,1),delete this._selectionLayerLookup[e.id])},t.prototype.addMapServicePopup=function(e,t){var o=this._addPopupLayer(e,t);return this._esriMapServiceLayers.push(e),o},t.prototype.clearSelection=function(){this._checkInit();for(var e=0;e<this._selectionLayers.length;e++)this._selectionLayers[e].getSource().clear();for(var t=0,o=this._mapClickFunctions;t<o.length;t++){(0,o[t])()}},t.prototype.addMapClickFunction=function(e){this._mapClickFunctions.push(e)},t}(r.default);t.MapPopupCls=u,s.MapPopupCls=u,t.default=u},function(e,t,o){"use strict";function n(e){e=e||{},e.divId=e.divId||"map",e.center=e.center||{x:-10018378,y:5574910},e.zoom="number"==typeof e.zoom?e.zoom:7,e.baseSwitcher="boolean"!=typeof e.baseSwitcher||e.baseSwitcher,e.fullScreen="boolean"==typeof e.fullScreen&&e.fullScreen,l("#"+e.divId).css("position","relative");var t=new i.layer.Tile({source:new i.source.OSM});if(e.baseSwitcher,e.zoom<0||e.zoom>28)throw"zoom out of range";if(e.center.x>=-180&&e.center.x<=180&&e.center.y>=-90&&e.center.y<=90){var o=new i.geom.Point([e.center.x,e.center.y]);new i.proj.Projection({code:"EPSG:4326"}),o.transform(new i.proj.Projection({code:"EPSG:4326"}),new i.proj.Projection({code:"EPSG:3857"}));var n=o.getCoordinates();e.center.x=n[0],e.center.y=n[1]}var r=i.control.defaults({attributionOptions:{collapsible:!1}}),a=new i.View({center:[e.center.x,e.center.y],zoom:e.zoom,minZoom:e.minZoom,maxZoom:e.maxZoom}),s=new i.Map({layers:[t],target:e.divId,controls:r,view:a});return e.fullScreen&&s.addControl(new i.control.FullScreen({})),s}Object.defineProperty(t,"__esModule",{value:!0});var r=o(0),i=o(2),l=o(1),a=r.default("olHelpers");t.quickMapBase=n,a.quickMapBase=n,t.default=n},function(e,t,o){"use strict";function n(e){return"number"==typeof e?e%1==0&&e>=0&&e<=28?a[e]:void console.log("invalid zoom level provided: "+e):void 0}function r(e){for(var t=0;t<a.length;t++)if(e>=a[t])return t;return 0}Object.defineProperty(t,"__esModule",{value:!0});var i=o(0),l=i.default("olHelpers.zoomResolutionConvert"),a=[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,.5971642834779395,.29858214173896974,.14929107086948487,.07464553543474244,.03732276771737122,.01866138385868561,.009330691929342804,.004665345964671402,.002332672982335701,.0011663364911678506,.0005831682455839253];t.zoomToResolution=n,l.zoomToResolution=n,t.resolutionToZoom=r,l.resolutionToZoom=r},,function(e,t,o){"use strict";function n(e,t){return"rgba("+e[0]+","+e[1]+","+e[2]+","+t+")"}function r(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function i(e){var t=e.drawingInfo.renderer,o=null;switch(t.type){case"simple":switch(e.geometryType){case"esriGeometryPoint":o=new m(e,y);break;case"esriGeometryPolyline":o=new m(e,h);break;case"esriGeometryPolygon":o=new m(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;case"uniqueValue":switch(e.geometryType){case"esriGeometryPoint":o=new _(e,y);break;case"esriGeometryPolyline":o=new _(e,h);break;case"esriGeometryPolygon":o=new _(e,f);break;default:console.log(e),alert(e.geometryType+" not handled")}break;default:alert("not handled renderer type: "+t.type)}return null==o?{style:void 0,legend:""}:{style:o.olStyle,legend:o.legendHtml}}function l(e,t){void 0===t&&(t=!1),t="boolean"==typeof t&&t;var o=e.layerName,n=e.legend,i="";if(t||(i+='<span class="legend-layer-subitem">'+o+"</span>"),1==n.length)i='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[0].imageData+'">';else{t||(i+='<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>'),i+="<ul>";for(var l=0;l<n.length;l++)i+="<li>",i+='<span class="legend-layer-subitem">'+r(n[l].label)+"</span>",i+='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+n[l].imageData+'">',i+="</li>";i+="</ul>"}return t||(i='<span class="legend-layer-subitem">'+o+"</span>"+i),i}function a(e){var t="",o=e.layers;if(1==o.length)t+=l(o[0],!0);else{t+="<ul>";for(var n=0;n<o.length;n++)t+="<li>"+l(o[n])+"</li>";t+="</ul>"}return t}var s=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])};return function(t,o){function n(){this.constructor=t}e(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var p=o(0),u=o(2),c=p.default("olHelpers.esriToOlStyle");c.htmlEscape=r;var d=function(){function e(e,t){this.symbolObj=e,this.opacity=t,this.olStyle=void 0,this.legendHtml=""}return e}(),y=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSMS":var i=n(r.symbolObj.color,r.opacity),l=n(r.symbolObj.outline.color,r.opacity),a=r.symbolObj.outline.width,s=r.symbolObj.size;r.olStyle=new u.style.Style({image:new u.style.Circle({radius:s,fill:new u.style.Fill({color:i}),stroke:new u.style.Stroke({color:l,width:a})})}),r.legendHtml='<span class="legend-layer-icon" style="color: '+i+'">&#9679;</span>';break;case"esriPMS":r.olStyle=new u.style.Style({image:new u.style.Icon({src:"data:image/png;base64,"+r.symbolObj.imageData})}),r.legendHtml='<img class="legend-layer-icon" height="17" src="data:image/png;base64,'+r.symbolObj.imageData+'">';break;default:console.log(r.symbolObj),alert("Point symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),h=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSLS":var i=n(r.symbolObj.color,r.opacity),l=r.symbolObj.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:i,width:l})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+i+";",r.legendHtml+="width: 40px;",r.legendHtml+="height: 4px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: -1px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Line symbol does not handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),f=function(e){function t(t,o){var r=e.call(this,t,o)||this;switch(r.symbolObj.type){case"esriSFS":var i=n(r.symbolObj.color,r.opacity),l=n(r.symbolObj.outline.color,r.opacity),a=r.symbolObj.outline.width;r.olStyle=new u.style.Style({stroke:new u.style.Stroke({color:l,width:a}),fill:new u.style.Fill({color:i})}),r.legendHtml='<span class="legend-layer-icon" ',r.legendHtml+='style="',r.legendHtml+="background-color: "+i+";",r.legendHtml+="border: solid "+l+" 1px;",r.legendHtml+="width: 40px;",r.legendHtml+="height: 9px;",r.legendHtml+="position: relative;",r.legendHtml+="display: inline-block;",r.legendHtml+="top: 2px;",r.legendHtml+='"></span>';break;default:console.log(r.symbolObj),alert("Polygon symbol does handle symbol type: "+r.symbolObj.type)}return r}return s(t,e),t}(d),g=function(){function e(e){this.opacity=(100-(e.drawingInfo.transparency||0))/100,this.renderer=e.drawingInfo.renderer,this.olStyle=void 0,this.legendHtml=""}return e}(),m=function(e){function t(t,o){var n=e.call(this,t)||this;n.symbol=n.renderer.symbol;var r=new o(n.symbol,n.opacity);return n.olStyle=r.olStyle,n.legendHtml=r.legendHtml,n}return s(t,e),t}(g),_=function(e){function t(t,o){var n=e.call(this,t)||this;if(n.uniqueValueInfos=n.renderer.uniqueValueInfos,n.propertyName=n.renderer.field1,n.defaultSymbol=n.renderer.defaultSymbol,n.defaultSymbol){var i=new o(n.defaultSymbol,n.opacity);n.defaultStyle=i.olStyle,n.defaultLabelHtml='<span class="legend-layer-subitem">'+r(n.renderer.defaultLabel)+"</span>"+i.legendHtml}else n.defaultStyle=void 0,n.defaultLabelHtml="other";n.valueArray=[],n.labelArray=[],n.legendArray=[],n.propertyStyleLookup={};for(var l=0,a=n.uniqueValueInfos;l<a.length;l++){var s=a[l];n.labelArray.push(s.label),n.valueArray.push(s.value);var p=new o(s.symbol,n.opacity);n.legendArray.push('<span class="legend-layer-subitem">'+r(s.label)+"</span>"+p.legendHtml),n.propertyStyleLookup[s.value]=p.olStyle}n.olStyle=function(e){var t=e.getProperties(),o=t[n.propertyName];return void 0!==n.propertyStyleLookup[o]?[n.propertyStyleLookup[o]]:[n.defaultStyle]},null!==n.defaultLabelHtml&&n.legendArray.push(n.defaultLabelHtml),n.legendHtml="<ul>";for(var u=0,c=n.legendArray;u<c.length;u++){var d=c[u];n.legendHtml+="<li>"+d+"</li>"}return n.legendHtml+="</ul>",n}return s(t,e),t}(g);t.makeFeatureServiceLegendAndSymbol=i,c.makeFeatureServiceLegendAndSymbol=i,t.makeMapServiceLegend=a,c.makeMapServiceLegend=a},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(0),r=o(3),i=o(6),l=n.default("collections"),a=o(1),s=function(){function e(e,t){this.groupLayers=[],this.groupLayersLookup={},this.groupGroups=[],this.groupGroupsLookup={},this.itemIdArray=[],void 0===e?(this.parent=null,this.groupId="root",this.groupName="root",this.allGroupLookup={root:this},this.allGroupArray=[this],this.allLayerArray=[],this.allLayerLookup={},this.layerParentLookup={},this.collapse=!1,this.addCheck=!1):(this.groupId=r.default(),this.parent=t,this.groupName=e.groupName,this.collapse="boolean"==typeof e.collapse&&e.collapse,this.addCheck="boolean"!=typeof e.addCheck||e.addCheck)}return e.prototype.addGroup=function(t,o){var n;n=o.length>0?o[o.length-1]:"root";var r=this.allGroupLookup[n],i=new e(t,r);if(this.allGroupLookup[i.groupId]=i,this.allGroupArray.push(i),r.groupGroups.push(i),r.groupGroupsLookup[i.groupId]=i,r.itemIdArray.indexOf(i.groupId)>0)throw console.log(i.groupId),"layer and group ids must be unique";return r.itemIdArray.push(i.groupId),i},e.prototype.addLegendLayer=function(e,t){var o;o=t.length>0?t[t.length-1]:"root",this.allLayerLookup[e.id]=e,this.allLayerArray.push(e);var n=this.allGroupLookup[o];if(n.groupLayers.push(e),n.groupLayersLookup[e.id]=e,n.itemIdArray.indexOf(e.id)>0)throw console.log(e.id),"layer and group ids must be unique";n.itemIdArray.push(e.id),this.layerParentLookup[e.id]=n},e.prototype.getLegendHtml=function(e,t){var o='<ul id="'+e+'" class="legend-container">';return o+="<li>"+t.legendTitle+'<input type="checkbox" checked id="suppress-by-extent-'+e+'" class="suppress-by-extent"><label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-'+e+'"><span></span></label></li>',o+=this._buildLegend(this.itemIdArray,this,t.layerDivClasses)+"</ul>"},e.prototype._buildLegend=function(e,t,o){if(0==e.length)return"";var n="",r=e[0];if(t.groupLayersLookup[r]){var i=t.groupLayersLookup[r];n+='<li id="'+i.id+'-layer-li" class="legend-layer-li '+o.join(" ")+'">'+i.getLegendDiv()+"</li>"}else if(t.groupGroupsLookup[r]){var l=t.groupGroupsLookup[r];n+="<li>",n+='<div id="'+l.groupId+'-legend-layer-div" class="legend-layer-group  '+o.join(" ")+'">',n+=l.addCheck?'<input type="checkbox" checked id="'+l.groupId+'-group-chck"><label for="'+l.groupId+'-group-chck" title="Click arrow to expand or collapse">'+l.groupName+"</label>":'<label title="Click arrow to expand or collapse">'+l.groupName+"</label>",n+='<span title="Expand/Collapse" class="layer-group-expander',n+=(l.collapse?" legend-layer-group-initial-collapse":"")+'">',n+=l.collapse?"&#9654;":"&#9660;",n+="</span>",n+="<ul>"+this._buildLegend(l.itemIdArray,l,o)+"</ul>",n+="</div>",n+="</li>"}return n+this._buildLegend(e.slice(1),t,o)},e}(),p=function(){function e(e,t,o){for(var n=0,l=e;n<l.length;n++){if(void 0===l[n])throw"undefined item passed in array to legend constructor"}o=o||{},o.legendTitle="string"==typeof o.legendTitle?o.legendTitle:"Legend",o.scaleDependent="boolean"!=typeof o.scaleDependent||o.scaleDependent,o.layerDivClasses=o.layerDivClasses||[],o.scaleDependent&&i.default.checkInit(),this.$divElement=a("#"+t),this._legendItems=e,this.layerGroup=new s,this._buildTree(e),this.legendId=r.default(),this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId,o));for(var p=0,u=this.layerGroup.allLayerArray;p<u.length;p++){u[p].applyCollapse()}var c=this;o.scaleDependent&&(i.default.checkInit(),i.default.addCallback(function(e,t,o){if(void 0===o||"change:resolution"==o)for(var n=0,r=this.layerGroup.allLayerArray;n<r.length;n++){var i=r[n],l=a("#"+i.id+"-layer-li");t>i.maxZoom||t<i.minZoom?l.addClass("layer-not-visible"):l.removeClass("layer-not-visible")}},this,100,!0,"legend1")),this.$divElement.find(".suppress-by-extent").change(function(){var e=a(".legend-layer-li");this.checked?e.removeClass("layer-force-show"):e.addClass("layer-force-show")}),this.$divElement.find(".legend-check").change(function(){var e=this.id.replace("-legend-layer-check","");c.layerGroup.allLayerLookup[e].visible=this.checked}),this.$divElement.find(".legend-layer-group > input[type=checkbox]").change(function(){a(this).siblings("ul").find("input[type=checkbox]").prop("checked",this.checked).trigger("change")}),this.$divElement.find(".layer-group-expander").click(function(){var e=a(this);e.removeClass("legend-layer-group-initial-collapse"),e.siblings("ul").slideToggle(),e.hasClass("legend-layer-group-collapsed")?(e.removeClass("legend-layer-group-collapsed"),e.html("&#9660;")):(e.addClass("legend-layer-group-collapsed"),e.html("&#9654;"))}),this.$divElement.find(".legend-layer-group-initial-collapse").trigger("click")}return e.prototype._buildTree=function(e,t){if(0!=e.length){var o=e[0];if((this._legendItems.indexOf(o)>-1||void 0===t)&&(t=[]),void 0!==o.groupName){var n=e[0],r=this.layerGroup.addGroup(n,t);t.push(r.groupId),this._buildTree(n.items,t)}else{var i=e[0];this.layerGroup.addLegendLayer(i,t)}this._buildTree(e.slice(1),t)}},e}();l.LayerLegend=p,t.default=p},,,,,,,,,,,,,,,,,,,,,,,,function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(7),r=o(10),i=o(17),l=n.quickMap(),a=new r.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer"),s=new r.LayerEsriMapServer("http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer",{name:"Six Year Plan",legendCollapse:!0});l.addLayer(a.olLayer),l.addLayer(s.olLayer);var p=[a,s];new i.default(p,"legend-container",{})}]);
 //# sourceMappingURL=simple_map.js.map
\ No newline at end of file
diff --git a/test-html/js/simple_map.js.map b/test-html/js/simple_map.js.map
index b86fa838b174cf9c863db1b1884b6e4685dad27e..ac930428244418f8048c27d3c9df97ffc33c027f 100644
--- a/test-html/js/simple_map.js.map
+++ b/test-html/js/simple_map.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3******","webpack:///./src/_test/simple_map.ts","webpack:///./src/olHelpers/quickMap.ts?1069**","webpack:///./src/olHelpers/quickMapBase.ts?fb65**","webpack:///./src/util/provide.ts?5c82****","webpack:///external \"ol\"?81ed**","webpack:///external \"$\"?57aa****","webpack:///./src/olHelpers/mapMove.ts?6a2b**","webpack:///./src/olHelpers/mapMoveCls.ts?cd45**","webpack:///./src/olHelpers/mapInteractionBase.ts?f419**","webpack:///./src/util/checkDefined.ts?bcd7**","webpack:///./src/util/makeGuid.ts?e80e**","webpack:///./src/olHelpers/mapPopup.ts?5d6c**","webpack:///./src/olHelpers/mapPopupCls.ts?e3f7**","webpack:///./src/layers/LayerBase.ts?bf94**","webpack:///./src/olHelpers/zoomResolutionConvert.ts?dd4b**","webpack:///./src/olHelpers/esriToOlStyle.ts?9363*","webpack:///./src/layers/LayerEsriMapServer.ts?9c85*","webpack:///./src/collections/LayerLegend.ts?9de6"],"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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../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// ./src/_test/simple_map.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\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","/**\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 = options || {} as quickMapOptions;\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/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 = ol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ol\"\n// module id = 4\n// module chunks = 0 2 3 7","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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","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 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","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 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 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","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","/**\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/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","/**\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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///simple_map.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d*","webpack:///../../src/util/provide.ts?0b57*","webpack:///external \"$\"?57aa*","webpack:///external \"ol\"?81ed*","webpack:///../../src/util/makeGuid.ts?60ef*","webpack:///../../src/olHelpers/mapPopup.ts?b204*","webpack:///../../src/olHelpers/mapInteractionBase.ts?98ee*","webpack:///../../src/olHelpers/mapMove.ts?aaca*","webpack:///../../src/olHelpers/quickMap.ts?6520*","webpack:///../../src/layers/LayerBase.ts?8ea5*","webpack:///../../src/util/checkDefined.ts?f518*","webpack:///../../src/layers/LayerEsriMapServer.ts?6a5c","webpack:///../../src/olHelpers/mapMoveCls.ts?0965*","webpack:///../../src/olHelpers/mapPopupCls.ts?505f*","webpack:///../../src/olHelpers/quickMapBase.ts?e5d6*","webpack:///../../src/olHelpers/zoomResolutionConvert.ts?1717*","webpack:///../../src/olHelpers/esriToOlStyle.ts?40ab","webpack:///../../src/collections/LayerLegend.ts?8eab","webpack:///../../src/_test/simple_map.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","provide","namespace","window","parts","split","nameSpace","length","util","default","$","ol","makeGuid","replace","r","Math","random","toString","mapPopupCls_1","mapPopup","provide_1","nm","MapInteractionBase","subtype","this","_map","_initialized","_subtype","init","theMap","_checkInit","initialized","msg","alert","console","log","checkInit","mapMoveCls_1","mapMove","quickMap","options","quickMapBase_1","quickMapBase","mapMove_1","mapPopup_1","zoomResolutionConvert","makeGuid_1","LayerBase","url","_url","_params","params","_legendCollapse","legendCollapse","_legendCheckbox","legendCheckbox","id","_name","animate","_opacity","opacity","_visible","visible","_source","undefined","_olLayer","_loaded","_maxResolution","zoomToResolution","minZoom","_minResolution","maxZoom","_minZoom","_maxZoom","_zIndex","zIndex","loadCallback","_legendContent","_$legendDiv","_applyCollapseCalled","_addLegendContent","legendContent","_load","loaded","getLegendDiv","additionalContent","indexOf","append","applyCollapse","addLegendContent","$expander","find","click","$this","siblings","slideToggle","hasClass","removeClass","html","addClass","trigger","refresh","source","_id","set","newId","_animate","newVal","newParams","visibility","setVisible","olLayer","setOpacity","newName","getSource","newZ","setZIndex","getOlLayer","undefinedOrNull","input","definedAndNotNull","__extends","extendStatics","setPrototypeOf","__proto__","Array","b","__","constructor","create","LayerBase_1","esriToOl","LayerEsriMapServer","_super","_this","TileArcGISRest","showLayers","layers","join","layer","Tile","minResolution","maxResolution","addPopup","_esriFormat","format","EsriJSON","_popupRequest","addMapServicePopup","urlCopy","newHtml","makeMapServiceLegend","getPopupInfo","queryParams","__this","abort","_i","_a","popupHtml","a","attrVal","toLowerCase","attr","slice","addMapServicePopupContent","readFeature","always","mapInteractionBase_1","checkDefined","MapMoveCls","_arrLyrRequest","_arrLyrTimeout","_arrLayer","_lookupLayer","_mapMoveCallbacks","_mapMoveCallbacksLookup","_mapMoveCallbackDelays","_mapMoveCallbackContext","_mapMoveCallbackTimeout","_mapExtent","_zoomLevel","map","getView","on","e","_updateMapExtent","triggerLyrLoad","type","triggerMoveCallback","theView","getZoom","extentArray","calculateExtent","getSize","minX","minY","maxX","maxY","lyr","index","eventType","clearTimeout","callbackFunc","mapMoveBefore","mapMoveMakeGetParams","__this_1","innerFunction","theLayer","theIndex","_innerThis","mapMoveParams","mapMoveCallback","fail","jqXHR","statusText","clear","setTimeout","onDemandDelay","ind","functionId","ctx","theFunc","f","addVectorLayer","triggerOnAdd","push","addCallback","func","context","delay","FeatureLayerProperties","feature","layerIndex","selectionLayer","esriLayerName","popupContent","MapPopupCls","_arrPopupLayerIds","_arrPopupLayerNames","_arrPopupLayers","_arrPopupOlLayers","_arrPopupContentFunction","_$popupContainer","_$popupContent","_$popupCloser","_popupOverlay","_selectionLayers","_selectionLayerLookup","_mapClickFunctions","_popupChangedFunctions","_esriMapServiceLayers","_popupOpen","_popupCoordinate","_passThroughLayerFeatureArray","_currentPopupIndex","_popupContentLength","$map","target","getTarget","_ease","easing","inAndOut","Overlay","element","autoPan","autoPanAnimation","duration","getCenter","addOverlay","evt","closePopup","geometry","geometryType","sr","getProjection","getCode","mapExtent","imageDisplay","returnGeometry","tolerance","layerFeatureObjectArray","_featuresAtPixel","featObj","props","getProperties","popupContentResponse","addFeature","_triggerFeatSelect","nextPopup","setPosition","scrollTop","pixel","getEventPixel","hit","hasFeatureAtPixel","lyrCandidate","getTargetElement","style","cursor","$currentPopupItemNumber","$innerPopup","$layerNameSpan","clearSelection","lyrFeatObj","toFixed","layerName","esriName","featLayerObject","forEachFeatureAtPixel","lyrIndex","blur","addPopupChangedFunction","chgFunction","_addPopupLayer","selectionStyle","color","width","theStyle","olStyle","Style","stroke","Stroke","image","Circle","radius","fill","Fill","Vector","addLayer","addVectorPopup","popupContentFunction","removeVectorPopup","idx","splice","addMapClickFunction","divId","center","x","y","zoom","baseSwitcher","fullScreen","css","osmLayer","OSM","geom","Point","proj","Projection","code","transform","coordinates","getCoordinates","controls","control","defaults","attributionOptions","collapsible","view","View","Map","addControl","FullScreen","zoomLevel","_zoomResLookup","resolutionToZoom","resolution","_colorArrayToRgba","colorArray","htmlEscape","str","String","makeFeatureServiceLegendAndSymbol","esriResponse","renderer","drawingInfo","symbolLegendOut","SingleSymbol","PointSymbol","LineSymbol","PolygonSymbol","UniqueValueSymbol","legend","legendHtml","mapServiceLegendItem","lyrObject","skipLayerNameAndExpander","legendItems","newLegendHtml","CommonSymbol","symbolObj","innerColor","outerColor","outline","outlineWidth","size","Icon","src","lineWidth","SymbolGenerator","SymbolClass","symbol","uniqueValueInfos","propertyName","defaultSymbol","defaultStyle","defaultLabelHtml","valueArray","labelArray","legendArray","propertyStyleLookup","uniqueVal","uniqueSym","checkProperties","checkProperty","_b","_c","h","LayerGroup","groupConfig","parent","groupLayers","groupLayersLookup","groupGroups","groupGroupsLookup","itemIdArray","groupId","groupName","allGroupLookup","root","allGroupArray","allLayerArray","allLayerLookup","layerParentLookup","collapse","addCheck","addGroup","parents","parentGroup","newGroup","addLegendLayer","newLayer","getLegendHtml","legendId","legendTitle","_buildLegend","layerDivClasses","itemIds","theGroup","theHml","itemId","otherGroup","LayerLegend","legendItems_1","scaleDependent","$divElement","_legendItems","layerGroup","_buildTree","ext","$lyrLi","change","legendLayerLis","checked","lyrId","prop","oneItem","groupItem","items","layerItem","quickMap_1","LayerEsriMapServer_1","LayerLegend_1","wisDotRegions","sixYearPlan","layerArray"],"mappings":"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","file":"simple_map.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = ol;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util');\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        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n        return v.toString(16);\r\n    });\r\n}\r\nnm.makeGuid = makeGuid;\r\nexports.default = makeGuid;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapPopupCls_1 = __webpack_require__(12);\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexports.mapPopup = new mapPopupCls_1.default();\r\nexports.default = exports.mapPopup;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * base interaction\r\n */\r\nvar MapInteractionBase = (function () {\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    function MapInteractionBase(subtype) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\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    MapInteractionBase.prototype.init = function (theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    };\r\n    Object.defineProperty(MapInteractionBase.prototype, \"map\", {\r\n        /**\r\n         * get reference to the ol map object\r\n         * @returns {ol.Map} the map object\r\n         */\r\n        get: function () {\r\n            return this._map;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(MapInteractionBase.prototype, \"initialized\", {\r\n        /**\r\n         * get if is initialized\r\n         * @returns {boolean} is initialized\r\n         */\r\n        get: function () {\r\n            return this._initialized;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    MapInteractionBase.prototype._checkInit = function () {\r\n        if (!this.initialized) {\r\n            var 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     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    MapInteractionBase.prototype.checkInit = function () {\r\n        this._checkInit();\r\n    };\r\n    return MapInteractionBase;\r\n}());\r\nexports.MapInteractionBase = MapInteractionBase;\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexports.default = MapInteractionBase;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapMoveCls_1 = __webpack_require__(11);\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\nexports.mapMove = new mapMoveCls_1.default();\r\nexports.default = exports.mapMove;\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar quickMapBase_1 = __webpack_require__(13);\r\nvar provide_1 = __webpack_require__(0);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMap(options) {\r\n    var m = quickMapBase_1.quickMapBase(options);\r\n    mapMove_1.default.init(m);\r\n    mapPopup_1.default.init(m);\r\n    return m;\r\n}\r\nexports.quickMap = quickMap;\r\nnm.quickMap = quickMap;\r\nexports.default = quickMap;\r\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar zoomResolutionConvert = __webpack_require__(14);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nvar LayerBase = (function () {\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    function LayerBase(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        options = options || {};\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\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        this.id = options.id || makeGuid_1.default();\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        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        }\r\n        else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        this._source = undefined;\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\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        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        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n        this._legendContent = '';\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        }\r\n        else {\r\n            this._legendContent += \"<label class=\\\"legend-layer-name\\\">\" + this.name + \"</label>\";\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     * 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    LayerBase.prototype._load = function () {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        }\r\n        else {\r\n            this._loaded = true;\r\n            return false;\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    LayerBase.prototype.getLegendDiv = function () {\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     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    LayerBase.prototype._addLegendContent = function (additionalContent) {\r\n        if (additionalContent === void 0) { additionalContent = ''; }\r\n        var addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n        this._legendContent += additionalContent;\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\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     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    LayerBase.prototype.addLegendContent = function (additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    };\r\n    LayerBase.prototype.applyCollapse = function () {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n            return undefined;\r\n        }\r\n        this._$legendDiv = $(\"#\" + this.id + \"-legend-layer-div\");\r\n        if (this._$legendDiv.length > 0) {\r\n            var $expander = this._$legendDiv.find('.legend-items-expander');\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n                $expander.click(function () {\r\n                    var $this = $(this);\r\n                    $this.siblings('ul').slideToggle();\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    }\r\n                    else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\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     * trick to refresh the layer\r\n     */\r\n    LayerBase.prototype.refresh = function () {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"id\", {\r\n        get: function () {\r\n            return this._id;\r\n        },\r\n        set: function (newId) {\r\n            this._id = newId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"animate\", {\r\n        get: function () {\r\n            return this._animate;\r\n        },\r\n        set: function (animate) {\r\n            this._animate = animate;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"legendContent\", {\r\n        /**\r\n         * get the legend content\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._legendContent;\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: function (newVal) {\r\n            this._legendContent = newVal;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"params\", {\r\n        /**\r\n         * get the map get params\r\n         * @type {object}\r\n         */\r\n        get: function () {\r\n            return this._params;\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: function (newParams) {\r\n            this._params = newParams;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minResolution\", {\r\n        /**\r\n         * get the minimum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxResolution\", {\r\n        /**\r\n         * get the maximum resolution\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxResolution;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"minZoom\", {\r\n        /**\r\n         * get min zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._minZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"maxZoom\", {\r\n        /**\r\n         * get max zoom\r\n         * @type {number|*}\r\n         */\r\n        get: function () {\r\n            return this._maxZoom;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"url\", {\r\n        /**\r\n         * get the url\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._url;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"visible\", {\r\n        /**\r\n         * Get the layer visibility\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._visible;\r\n        },\r\n        /**\r\n         * set the visibility\r\n         * @param visibility\r\n         */\r\n        set: function (visibility) {\r\n            this.setVisible(visibility);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setVisible = function (visibility) {\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    Object.defineProperty(LayerBase.prototype, \"opacity\", {\r\n        /**\r\n         * Get the layer opacity\r\n         * @type {number}\r\n         */\r\n        get: function () {\r\n            return this._opacity;\r\n        },\r\n        /**\r\n         * Set the layer opacity\r\n         * @param {number} opacity - layer opacity\r\n         */\r\n        set: function (opacity) {\r\n            this._opacity = opacity;\r\n            if (this.olLayer) {\r\n                this.olLayer.setOpacity(this._opacity);\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"name\", {\r\n        /**\r\n         * Get the layer name\r\n         * @type {string}\r\n         */\r\n        get: function () {\r\n            return this._name;\r\n        },\r\n        /**\r\n         * set the layer name\r\n         * @param {string} newName - the new name\r\n         */\r\n        set: function (newName) {\r\n            this._name = newName;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"loaded\", {\r\n        /**\r\n         * Check if the layer is loaded\r\n         * @type {boolean}\r\n         */\r\n        get: function () {\r\n            return this._loaded;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerBase.prototype, \"source\", {\r\n        /**\r\n         * get the layer source\r\n         * @type {*}\r\n         */\r\n        get: function () {\r\n            return this.getSource();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getSource = function () {\r\n        return this._source;\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"zIndex\", {\r\n        /**\r\n         * get the z index\r\n         */\r\n        get: function () {\r\n            return this._zIndex;\r\n        },\r\n        /**\r\n         * set the z index\r\n         */\r\n        set: function (newZ) {\r\n            this._zIndex = newZ;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.setZIndex = function (newZ) {\r\n    };\r\n    Object.defineProperty(LayerBase.prototype, \"olLayer\", {\r\n        /**\r\n         * the the ol layer\r\n         */\r\n        get: function () {\r\n            return this.getOlLayer();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LayerBase.prototype.getOlLayer = function () {\r\n        return this._olLayer;\r\n    };\r\n    return LayerBase;\r\n}());\r\nexports.LayerBase = LayerBase;\r\nnm.LayerBase = LayerBase;\r\nexports.default = LayerBase;\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('util.checkDefined');\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\nfunction undefinedOrNull(input) {\r\n    \"use strict\";\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\nexports.undefinedOrNull = undefinedOrNull;\r\nnm.undefinedOrNull = undefinedOrNull;\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\nfunction definedAndNotNull(input) {\r\n    \"use strict\";\r\n    return !(undefinedOrNull(input));\r\n}\r\nexports.definedAndNotNull = definedAndNotNull;\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nvar LayerBase_1 = __webpack_require__(8);\r\nvar esriToOl = __webpack_require__(16);\r\nvar mapPopup_1 = __webpack_require__(4);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('layers');\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nvar LayerEsriMapServer = (function (_super) {\r\n    __extends(LayerEsriMapServer, _super);\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    function LayerEsriMapServer(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var _this = _super.call(this, url, options) || this;\r\n        _this._source = new ol.source.TileArcGISRest({\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        _this._olLayer = new ol.layer.Tile({\r\n            source: _this._source,\r\n            visible: _this.visible,\r\n            opacity: _this.opacity,\r\n            minResolution: _this._minResolution,\r\n            maxResolution: _this._maxResolution\r\n        });\r\n        _this._olLayer.setZIndex(_this._zIndex);\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n        _this._esriFormat = new ol.format.EsriJSON();\r\n        _this._popupRequest = null;\r\n        _this.addLegendContent();\r\n        if (options.addPopup) {\r\n            mapPopup_1.default.addMapServicePopup(_this);\r\n        }\r\n        return _this;\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    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {\r\n        var _this = this;\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n        $.get(urlCopy, {}, function (d) {\r\n            var newHtml = esriToOl.makeMapServiceLegend(d);\r\n            _super.prototype.addLegendContent.call(_this, newHtml);\r\n        }, 'json');\r\n    };\r\n    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n        var urlCopy = this.url;\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n        urlCopy += 'identify?callback=?';\r\n        var __this = this;\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {\r\n                var r = _a[_i];\r\n                var popupHtml = '<table class=\"esri-popup-table\">';\r\n                for (var a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        var attrVal = r['attributes'][a];\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n                        var attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n                        popupHtml += \"<tr><td>\" + attr + \"</td><td>\" + attrVal + \"</td></tr>\";\r\n                    }\r\n                }\r\n                popupHtml += '</table>';\r\n                mapPopup_1.default.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n    };\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"source\", {\r\n        /**\r\n         *\r\n         * @returns {ol.source.TileArcGISRest} the vector source\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getSource.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LayerEsriMapServer.prototype, \"olLayer\", {\r\n        /**\r\n         *\r\n         * @returns the ol layer\r\n         */\r\n        get: function () {\r\n            return _super.prototype.getOlLayer.call(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return LayerEsriMapServer;\r\n}(LayerBase_1.LayerBase));\r\nexports.LayerEsriMapServer = LayerEsriMapServer;\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexports.default = LayerEsriMapServer;\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar checkDefined = __webpack_require__(9);\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nvar MapMoveCls = (function (_super) {\r\n    __extends(MapMoveCls, _super);\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    function MapMoveCls() {\r\n        var _this = _super.call(this, 'map move') || this;\r\n        _this._arrLyrRequest = [];\r\n        _this._arrLyrTimeout = [];\r\n        _this._arrLayer = [];\r\n        _this._lookupLayer = {};\r\n        _this._mapMoveCallbacks = [];\r\n        _this._mapMoveCallbacksLookup = {};\r\n        _this._mapMoveCallbackDelays = [];\r\n        _this._mapMoveCallbackContext = [];\r\n        _this._mapMoveCallbackTimeout = [];\r\n        _this._mapExtent = undefined;\r\n        _this._zoomLevel = undefined;\r\n        return _this;\r\n    }\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    MapMoveCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n            _this._updateMapExtent();\r\n            // trigger the layer updates\r\n            for (var i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n            // trigger the map callbacks\r\n            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    };\r\n    MapMoveCls.prototype._updateMapExtent = function () {\r\n        var theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n        var extentArray = theView.calculateExtent(this.map.getSize());\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    Object.defineProperty(MapMoveCls.prototype, \"mapExtent\", {\r\n        /**\r\n         * return the map extent\r\n         */\r\n        get: function () {\r\n            if (!this._mapExtent) {\r\n                this._updateMapExtent();\r\n            }\r\n            return this._mapExtent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\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    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        }\r\n        else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        }\r\n        else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\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        // 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        // dummy callback used if before load returns false\r\n        var callbackFunc = function () { };\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n            var __this_1 = this;\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    var _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {\r\n                        /**\r\n                         * @type {LayerBaseVector}\r\n                         */\r\n                        theLayer.mapMoveCallback(d);\r\n                        theLayer.loadCallback();\r\n                    }, 'json').fail(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(function () {\r\n                        _innerThis._arrLyrTimeout[theIndex] = null;\r\n                        _innerThis._arrLyrRequest[theIndex] = null;\r\n                    });\r\n                }\r\n                innerFunction.call(__this_1, lyr, index);\r\n            };\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     * 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    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {\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        if (typeof ind !== 'number') {\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n        if (ind < 0) {\r\n            console.log('function not found');\r\n            return;\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        var ctx = this._mapMoveCallbackContext[ind];\r\n        var theFunc = this._mapMoveCallbacks[ind];\r\n        var __this = this;\r\n        var f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n            else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\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    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {\r\n        if (triggerOnAdd === void 0) { triggerOnAdd = true; }\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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     * 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    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {\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_1.default();\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        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\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    return MapMoveCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapMoveCls = MapMoveCls;\r\nnm.MapMoveCls = MapMoveCls;\r\nexports.default = MapMoveCls;\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar mapInteractionBase_1 = __webpack_require__(5);\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\r\nvar FeatureLayerProperties = (function () {\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    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {\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    Object.defineProperty(FeatureLayerProperties.prototype, \"layerName\", {\r\n        get: function () {\r\n            if (typeof this.esriLayerName == 'string') {\r\n                return this.esriLayerName;\r\n            }\r\n            else {\r\n                return this.layer.name;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return FeatureLayerProperties;\r\n}());\r\nexports.FeatureLayerProperties = FeatureLayerProperties;\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nvar MapPopupCls = (function (_super) {\r\n    __extends(MapPopupCls, _super);\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     * map popup constructor\r\n     */\r\n    function MapPopupCls() {\r\n        var _this = _super.call(this, 'map popup') || this;\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        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        _this._popupChangedFunctions = [];\r\n        _this._esriMapServiceLayers = [];\r\n        _this._popupOpen = false;\r\n        _this._popupCoordinate = null;\r\n        _this._passThroughLayerFeatureArray = [];\r\n        _this._currentPopupIndex = -1;\r\n        _this._popupContentLength = 0;\r\n        return _this;\r\n    }\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    MapPopupCls.prototype.init = function (theMap) {\r\n        var _this = this;\r\n        _super.prototype.init.call(this, theMap);\r\n        var $map;\r\n        var target = this.map.getTarget();\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n        $map.append('<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        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        var _ease = function (n) {\r\n            return ol.easing.inAndOut(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        this._map.addOverlay(this._popupOverlay);\r\n        this._$popupCloser.click(function (evt) {\r\n            _this.closePopup();\r\n        });\r\n        // display popup on click\r\n        this._map.on('singleclick', function (evt) {\r\n            _this.closePopup();\r\n            _this._popupCoordinate = evt['coordinate'];\r\n            // esri map service layers\r\n            if (_this._esriMapServiceLayers.length > 0) {\r\n                var 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()).join(','),\r\n                    imageDisplay: _this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {\r\n                    var l = _a[_i];\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);\r\n            _this._passThroughLayerFeatureArray = [];\r\n            _this._currentPopupIndex = -1;\r\n            for (var i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                var featObj = layerFeatureObjectArray[i];\r\n                var props = featObj.feature.getProperties();\r\n                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                }\r\n                else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    _this._passThroughLayerFeatureArray.push(featObj);\r\n                }\r\n                else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;\r\n            _this._currentPopupIndex = -1;\r\n            var 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            popupHtml += '</div>';\r\n            _this._$popupContent.html(popupHtml);\r\n            _this._$popupContent.find('.previous-popup').click(function () {\r\n                if (_this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == 0) {\r\n                    _this._currentPopupIndex = _this._popupContentLength - 1;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex--;\r\n                }\r\n                _this._triggerFeatSelect();\r\n            });\r\n            var nextPopup = _this._$popupContent.find('.next-popup');\r\n            nextPopup.click(function () {\r\n                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n                if (_this._currentPopupIndex == _this._popupContentLength - 1) {\r\n                    _this._currentPopupIndex = 0;\r\n                }\r\n                else {\r\n                    _this._currentPopupIndex++;\r\n                }\r\n                _this._triggerFeatSelect();\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        //change mouse cursor when over marker\r\n        this._map.on('pointermove', function (evt) {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            var pixel = _this.map.getEventPixel(evt['originalEvent']);\r\n            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {\r\n                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {\r\n                    var olLayer = _a[_i];\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            });\r\n            var mapElement = _this.map.getTargetElement();\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n        return true;\r\n    };\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._triggerFeatSelect = function () {\r\n        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        var $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        var 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 (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\r\n            f(this._$popupContent);\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    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {\r\n        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);\r\n        featLayerObject.popupContent = popupContent;\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').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     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    MapPopupCls.prototype._featuresAtPixel = function (pixel) {\r\n        var _this = this;\r\n        var layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {\r\n            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n        return layerFeatureObjectArray;\r\n    };\r\n    MapPopupCls.prototype.closePopup = function () {\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        return false;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\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    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {\r\n        this._checkInit();\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        var theStyle;\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        }\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        var selectionLayer = new ol.layer.Vector({\r\n            source: new ol.source.Vector(),\r\n            style: theStyle\r\n        });\r\n        selectionLayer.setZIndex(100);\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n        return selectionLayer;\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    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {\r\n        var 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        return selectionLayer;\r\n    };\r\n    ;\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    MapPopupCls.prototype.removeVectorPopup = function (lyr) {\r\n        var idx = this._arrPopupLayerIds.indexOf(lyr.id);\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     * @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    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {\r\n        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n        return selectionLayer;\r\n    };\r\n    MapPopupCls.prototype.clearSelection = function () {\r\n        this._checkInit();\r\n        for (var i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {\r\n            var f = _a[_i];\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    MapPopupCls.prototype.addMapClickFunction = function (func) {\r\n        this._mapClickFunctions.push(func);\r\n    };\r\n    return MapPopupCls;\r\n}(mapInteractionBase_1.default));\r\nexports.MapPopupCls = MapPopupCls;\r\nnm.MapPopupCls = MapPopupCls;\r\nexports.default = MapPopupCls;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('olHelpers');\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\nfunction quickMapBase(options) {\r\n    options = options || {};\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    var $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n    var 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    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')\";\r\n    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==')\";\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    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        var p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        new ol.proj.Projection({ code: \"EPSG:4326\" });\r\n        p.transform(new ol.proj.Projection({ code: \"EPSG:4326\" }), new ol.proj.Projection({ code: \"EPSG:3857\" }));\r\n        var coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n    var controls = ol.control.defaults({\r\n        attributionOptions: { collapsible: false }\r\n    });\r\n    var 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    var 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    if (options.fullScreen) {\r\n        map.addControl(new ol.control.FullScreen({}));\r\n    }\r\n    return map;\r\n}\r\nexports.quickMapBase = quickMapBase;\r\nnm.quickMapBase = quickMapBase;\r\nexports.default = quickMapBase;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar nm = provide_1.default('olHelpers.zoomResolutionConvert');\r\nvar _zoomResLookup = [\r\n    156543.03392804097,\r\n    78271.51696402048,\r\n    39135.75848201024,\r\n    19567.87924100512,\r\n    9783.93962050256,\r\n    4891.96981025128,\r\n    2445.98490512564,\r\n    1222.99245256282,\r\n    611.49622628141,\r\n    305.748113140705,\r\n    152.8740565703525,\r\n    76.43702828517625,\r\n    38.21851414258813,\r\n    19.109257071294063,\r\n    9.554628535647032,\r\n    4.777314267823516,\r\n    2.388657133911758,\r\n    1.194328566955879,\r\n    0.5971642834779395,\r\n    0.29858214173896974,\r\n    0.14929107086948487,\r\n    0.07464553543474244,\r\n    0.03732276771737122,\r\n    0.01866138385868561,\r\n    0.009330691929342804,\r\n    0.004665345964671402,\r\n    0.002332672982335701,\r\n    0.0011663364911678506,\r\n    0.0005831682455839253 //28\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\nfunction zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        }\r\n        else {\r\n            console.log(\"invalid zoom level provided: \" + zoomLevel);\r\n            return undefined;\r\n        }\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\nexports.zoomToResolution = zoomToResolution;\r\nnm.zoomToResolution = zoomToResolution;\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\nfunction resolutionToZoom(resolution) {\r\n    for (var i = 0; i < _zoomResLookup.length; i++) {\r\n        if (resolution >= _zoomResLookup[i]) {\r\n            return i;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.resolutionToZoom = resolutionToZoom;\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n/***/ }),\n/* 15 */,\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nvar provide_1 = __webpack_require__(0);\r\nvar ol = __webpack_require__(2);\r\nvar nm = provide_1.default('olHelpers.esriToOlStyle');\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 * @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    return \"rgba(\" + colorArray[0] + \",\" + colorArray[1] + \",\" + colorArray[2] + \",\" + opacity + \")\";\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\nnm.htmlEscape = htmlEscape;\r\nvar CommonSymbol = (function () {\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    function CommonSymbol(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n    return CommonSymbol;\r\n}());\r\nvar PointSymbol = (function (_super) {\r\n    __extends(PointSymbol, _super);\r\n    function PointSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\r\n                var radius = _this.symbolObj.size;\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        return _this;\r\n    }\r\n    return PointSymbol;\r\n}(CommonSymbol));\r\nvar LineSymbol = (function (_super) {\r\n    __extends(LineSymbol, _super);\r\n    function LineSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var lineWidth = _this.symbolObj.width;\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                _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        return _this;\r\n    }\r\n    return LineSymbol;\r\n}(CommonSymbol));\r\nvar PolygonSymbol = (function (_super) {\r\n    __extends(PolygonSymbol, _super);\r\n    function PolygonSymbol(symbolObj, opacity) {\r\n        var _this = _super.call(this, symbolObj, opacity) || this;\r\n        switch (_this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);\r\n                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);\r\n                var outlineWidth = _this.symbolObj.outline.width;\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                _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            default:\r\n                console.log(_this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);\r\n        }\r\n        return _this;\r\n    }\r\n    return PolygonSymbol;\r\n}(CommonSymbol));\r\nvar SymbolGenerator = (function () {\r\n    function SymbolGenerator(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    return SymbolGenerator;\r\n}());\r\nvar SingleSymbol = (function (_super) {\r\n    __extends(SingleSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    function SingleSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.symbol = _this.renderer.symbol;\r\n        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);\r\n        _this.olStyle = symbolObj.olStyle;\r\n        _this.legendHtml = symbolObj.legendHtml;\r\n        return _this;\r\n    }\r\n    return SingleSymbol;\r\n}(SymbolGenerator));\r\nvar UniqueValueSymbol = (function (_super) {\r\n    __extends(UniqueValueSymbol, _super);\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    function UniqueValueSymbol(esriResponse, SymbolClass) {\r\n        var _this = _super.call(this, esriResponse) || this;\r\n        _this.uniqueValueInfos = _this.renderer['uniqueValueInfos'];\r\n        _this.propertyName = _this.renderer['field1'];\r\n        _this.defaultSymbol = _this.renderer['defaultSymbol'];\r\n        if (_this.defaultSymbol) {\r\n            var 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        }\r\n        else {\r\n            _this.defaultStyle = undefined;\r\n            _this.defaultLabelHtml = 'other';\r\n        }\r\n        _this.valueArray = [];\r\n        _this.labelArray = [];\r\n        _this.legendArray = [];\r\n        _this.propertyStyleLookup = {};\r\n        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {\r\n            var uniqueVal = _a[_i];\r\n            _this.labelArray.push(uniqueVal['label']);\r\n            _this.valueArray.push(uniqueVal['value']);\r\n            var 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        _this.olStyle = function (feature) {\r\n            var checkProperties = feature.getProperties();\r\n            var checkProperty = checkProperties[_this.propertyName];\r\n            var returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            }\r\n            else {\r\n                returnValue = [_this.defaultStyle];\r\n            }\r\n            return returnValue;\r\n        };\r\n        if (_this.defaultLabelHtml !== null) {\r\n            _this.legendArray.push(_this.defaultLabelHtml);\r\n        }\r\n        _this.legendHtml = '<ul>';\r\n        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {\r\n            var h = _c[_b];\r\n            _this.legendHtml += \"<li>\" + h + \"</li>\";\r\n        }\r\n        _this.legendHtml += '</ul>';\r\n        return _this;\r\n    }\r\n    return UniqueValueSymbol;\r\n}(SymbolGenerator));\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 * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nfunction makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    var renderer = esriResponse.drawingInfo.renderer;\r\n    var symbolLegendOut = null;\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    if (symbolLegendOut == null) {\r\n        return { style: undefined, legend: '' };\r\n    }\r\n    else {\r\n        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };\r\n    }\r\n}\r\nexports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\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) {\r\n    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    var layerName = lyrObject['layerName'];\r\n    var legendItems = lyrObject['legend'];\r\n    var legendHtml = '';\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\";\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    }\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 (var 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    if (!skipLayerNameAndExpander) {\r\n        legendHtml = \"<span class=\\\"legend-layer-subitem\\\">\" + layerName + \"</span>\" + legendHtml;\r\n    }\r\n    return legendHtml;\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\nfunction makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n    var newLegendHtml = '';\r\n    var layers = esriResponse['layers'];\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    }\r\n    else {\r\n        newLegendHtml += '<ul>';\r\n        for (var i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n    return newLegendHtml;\r\n}\r\nexports.makeMapServiceLegend = makeMapServiceLegend;\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar makeGuid_1 = __webpack_require__(3);\r\nvar mapMove_1 = __webpack_require__(6);\r\nvar nm = provide_1.default('collections');\r\nvar $ = __webpack_require__(1);\r\nvar LayerGroup = (function () {\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    function LayerGroup(groupConfig, parent) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\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        }\r\n        else {\r\n            this.groupId = makeGuid_1.default();\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     * @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    LayerGroup.prototype.addGroup = function (groupConfig, parents) {\r\n        var parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        }\r\n        else {\r\n            parent = 'root';\r\n        }\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        var parentGroup = this.allGroupLookup[parent];\r\n        var newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\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        return newGroup;\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    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {\r\n        var parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        }\r\n        else {\r\n            parent = 'root';\r\n        }\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        var parentGroup = this.allGroupLookup[parent];\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        this.layerParentLookup[newLayer.id] = parentGroup;\r\n    };\r\n    LayerGroup.prototype.getLegendHtml = function (legendId, options) {\r\n        var legendHtml = \"<ul id=\\\"\" + legendId + \"\\\" class=\\\"legend-container\\\">\";\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        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n        return legendHtml;\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    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n        var theHml = '';\r\n        var itemId = itemIds[0];\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            var 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        else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            var otherGroup = theGroup.groupGroupsLookup[itemId];\r\n            theHml += \"<li>\";\r\n            theHml += \"<div id=\\\"\" + otherGroup.groupId + \"-legend-layer-div\\\" \" +\r\n                (\"class=\\\"legend-layer-group  \" + layerDivClasses.join(' ') + \"\\\">\");\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            }\r\n            else {\r\n                theHml += \"<label title=\\\"Click arrow to expand or collapse\\\">\" + otherGroup.groupName + \"</label>\";\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            //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        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    };\r\n    return LayerGroup;\r\n}());\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nvar LayerLegend = (function () {\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    function LayerLegend(legendItems, divId, options) {\r\n        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {\r\n            var i = legendItems_1[_i];\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n        options = options || {};\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        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove_1.default.checkInit();\r\n        }\r\n        this.$divElement = $('#' + divId);\r\n        this._legendItems = legendItems;\r\n        this.layerGroup = new LayerGroup();\r\n        this._buildTree(legendItems);\r\n        this.legendId = makeGuid_1.default();\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {\r\n            var l = _b[_a];\r\n            l.applyCollapse();\r\n        }\r\n        var _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_1.default.checkInit();\r\n            mapMove_1.default.addCallback(function (ext, zoom, evt) {\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {\r\n                        var lyr = _a[_i];\r\n                        var $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        }\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        // <editor-fold desc=\"add event listeners\">\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            var legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            }\r\n            else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            var lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\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        this.$divElement.find('.layer-group-expander').click(function () {\r\n            var $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n            $this.siblings('ul').slideToggle();\r\n            if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            }\r\n            else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\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     * @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    LayerLegend.prototype._buildTree = function (legendItems, parents) {\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n        var oneItem = legendItems[0];\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        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            var groupItem = legendItems[0];\r\n            var newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        }\r\n        else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            var layerItem = legendItems[0];\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    };\r\n    return LayerLegend;\r\n}());\r\nnm.LayerLegend = LayerLegend;\r\nexports.default = LayerLegend;\r\n\n\n/***/ }),\n/* 18 */,\n/* 19 */,\n/* 20 */,\n/* 21 */,\n/* 22 */,\n/* 23 */,\n/* 24 */,\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */,\n/* 38 */,\n/* 39 */,\n/* 40 */,\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nvar quickMap_1 = __webpack_require__(7);\r\nvar LayerEsriMapServer_1 = __webpack_require__(10);\r\nvar LayerLegend_1 = __webpack_require__(17);\r\nvar map = quickMap_1.quickMap();\r\nvar wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\nvar sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true });\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\nvar 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\nvar legend = new LayerLegend_1.default(layerArray, 'legend-container', {});\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// simple_map.js"," \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 95f473b09da6d84b9b8b","/**\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\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 = options || {} as quickMapOptions;\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 '../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../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// ../../src/_test/simple_map.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/slider-test.js b/test-html/js/slider-test.js
index 93644141b1dbf0c0dead51762651530d70274dc1..63d38330c437d1c798111ffa333c61ff652b9331 100644
--- a/test-html/js/slider-test.js
+++ b/test-html/js/slider-test.js
@@ -1,819 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 0:
-/*!***********************************!*\
-  !*** ./dist/_test/slider-test.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-	/**
-	 * Created by gavorhes on 6/22/2016.
-	 */
-	var Sliders_1 = __webpack_require__(/*! ../collections/Sliders */ 33);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-
-
-/***/ },
-
-/***/ 3:
-/*!******************************!*\
-  !*** ./dist/util/provide.js ***!
-  \******************************/
-/***/ function(module, exports) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	/**
-	 * 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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = provide;
-
-
-/***/ },
-
-/***/ 5:
-/*!********************!*\
-  !*** external "$" ***!
-  \********************/
-/***/ function(module, exports) {
-
-	module.exports = $;
-
-/***/ },
-
-/***/ 33:
-/*!*************************************!*\
-  !*** ./dist/collections/Sliders.js ***!
-  \*************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Created by gavorhes on 12/10/2015.
-	 */
-	"use strict";
-	var provide_1 = __webpack_require__(/*! ../util/provide */ 3);
-	var $ = __webpack_require__(/*! jquery */ 5);
-	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;
-	Object.defineProperty(exports, "__esModule", { value: true });
-	exports.default = TipSliders;
-
-
-/***/ }
-
-/******/ });
+!function(e){function t(l){if(i[l])return i[l].exports;var r=i[l]={i:l,l:!1,exports:{}};return e[l].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var i={};t.m=e,t.c=i,t.i=function(e){return e},t.d=function(e,i,l){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:l})},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=42)}({0:function(e,t,i){"use strict";function l(e){void 0===window.gv&&(window.gv={});for(var t=e.split("."),i=window.gv,l=0;l<t.length;l++){void 0===i[t[l]]&&(i[t[l]]={}),i=i[t[l]]}return i}Object.defineProperty(t,"__esModule",{value:!0}),l("util"),window.gv.util.provide=l,t.default=l},1:function(e,t){e.exports=$},15:function(e,t){e.exports=jquery-ui},23:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l=i(0),r=i(1),o=l.default("collections"),s=function(){function e(e){this.label=e.label,this.presets=e.presets,this.domId=this.label.replace(/ /g,"").toLowerCase();for(var t=0,i=0,l=this.presets;i<l.length;i++){t+=l[i].value}if(100!=t)throw"preset sum does note equal 100"}return e}(),a=function(){function e(e){this._dropdownSelection=null,this._weight=null,this.name=e.label,this.domId=this.name.toLowerCase().replace(/ /g,"-"),this._locked=!1,this._min=0,this._max=100,this.labelLow=null,this.labelHigh=null,this.labelVal=null,this.slider=null,this.chk=null,this.atMin=!1,this.atMax=!1;for(var t='<select class="'+(1==e.yearOptions.length?"hidden-select":"show-select")+'" id="'+this.domId+'_chg">',i=0;i<e.yearOptions.length;i++){var l=e.yearOptions[i];t+='<option value="'+l.column+'">'+l.label+"</option>"}t+="</select>",this.selectedParamDefault=this.selectedParam,this.html='<div class="slider-div"><label for="'+this.domId+'_chk" class="slider-label">'+this.name+"</label>"+t+'<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>'}return e.prototype.addToDom=function(e){e.append(this.html),this.labelLow=r("#"+this.domId+"_low"),this.labelHigh=r("#"+this.domId+"_high"),this.labelVal=r("#"+this.domId+"_lbl"),this.slider=r("#"+this.domId),this.selectionBox=r("#"+this.domId+"_chg"),this.chk=r("#"+this.domId+"_chk")},e.prototype.increment=function(e){var t=0;return e=Number(e.toFixed(1)),this._weight+=e,this._weight<this._min?(t=this._min-this._weight,this._weight=this._min,this.atMin=!0):this._weight>this._max?(t=this._max-this._weight,this._weight=this._max,this.atMax=!0):(this.atMin=!1,this.atMax=!1),this.slider.val(this._weight.toFixed(1)),this.labelVal.html(this._weight.toFixed(1)+"%"),t},e.prototype.setValAndDropDown=function(e,t){this.min=0,this.max=100,this.weight=e,this.slider.val(e.toFixed(1)),this.selectionBox.val(t),this.selectedParam=t,this.locked=!0},Object.defineProperty(e.prototype,"locked",{get:function(){return this._locked},set:function(e){this._locked=e,this.slider.prop("disabled",this._locked),this.selectionBox.prop("disabled",this._locked),this.chk.prop("checked",!this._locked)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"min",{get:function(){return this._min},set:function(e){this._min=Number(e.toFixed(1)),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:!0,configurable:!0}),Object.defineProperty(e.prototype,"max",{get:function(){return this._max},set:function(e){this._max=Number(e.toFixed(1)),this._max>100&&(this._max=100),this.labelHigh.html(this._max.toFixed(1)),this.slider.attr("max",this._max.toFixed(1)),this.atMax=this._weight==this._max},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"weight",{get:function(){return this._weight},set:function(e){this._weight=Number(e.toFixed(1)),this.labelVal.html(this._weight.toFixed(1)+"%"),this._weight<=this._min?(this.atMin=!0,this.atMax=!1):this._weight>=this._max?(this.atMin=!1,this.atMax=!0):(this.atMin=!1,this.atMax=!1)},enumerable:!0,configurable:!0}),e}();o._Slider=a;var n=function(){function e(e,t,i,l,o,n,h){var u=this;this.resetting=!1,this.reservedPercent=0,this.$container=r("#"+i),this.$container.addClass("slider-container"),this._changedCallback="function"==typeof h?h:function(){},this._$presetSelector=l,this._$regionSelector=o,this._$versionSelector=n,this._sliderList=[],this._sliderLookup={};for(var c=0;c<e.length;c++){var d=new a(e[c]);this._sliderList.push(d),this._sliderLookup[d.domId]=d,d.addToDom(this.$container)}this._presetArray=[],this._presetLookup={};for(var c=0;c<t.length;c++){var _=new s(t[c]),m=(c+1).toFixed();this._presetLookup[m]=_,this._presetArray.push(_),this._$presetSelector.append('<option value="'+m+'">'+_.label+"</option>")}this._lockedList=[],this._inRangeList=[],this._atMinList=[],this._atMaxList=[],this.lockedCount=10,this.notLockedCount=0,this._splitSliderArray(),this._$presetSelector.change(function(){u.setPresetValues(),u._runChangedCallback()}),this._$regionSelector.change(function(){u._runChangedCallback()}),this._$versionSelector.change(function(){u._runChangedCallback()}),this._$presetSelector.trigger("change"),this._addEventListeners()}return e.prototype._runChangedCallback=function(){this._changedCallback(this.paramWeightsRegionVersion)},Object.defineProperty(e.prototype,"changedCallback",{get:function(){return this._changedCallback},set:function(e){this._changedCallback=e,this._runChangedCallback()},enumerable:!0,configurable:!0}),e.prototype.setPresetValues=function(){for(var e=this._$presetSelector.val()||"1",t=this._presetLookup[e],i=0;i<t.presets.length;i++){var l=t.presets[i],r=this._sliderList[i];r.locked=!0,r.setValAndDropDown(l.value,l.column)}},e.prototype._splitSliderArray=function(){this._lockedList=[],this._inRangeList=[],this._atMinList=[],this._atMaxList=[];for(var e=0;e<this._sliderList.length;e++){var t=this._sliderList[e];t.locked?this._lockedList.push(t):t.atMin?this._atMinList.push(t):t.atMax?this._atMaxList.push(t):this._inRangeList.push(t)}this.lockedCount=this._lockedList.length,this.notLockedCount=this._sliderList.length-this.lockedCount},e.prototype._handleRemainder=function(e,t){if(0!=(e=Number(e.toFixed(1)))){this._splitSliderArray();for(var i=[],l=0;l<this._inRangeList.length;l++){var r=this._inRangeList[l];r.domId!=t&&i.push(r)}if(e>0)for(var l=0;l<this._atMaxList.length;l++){var r=this._atMaxList[l];r.domId!=t&&i.push(r)}else for(var l=0;l<this._atMinList.length;l++){var r=this._atMinList[l];r.domId!=t&&i.push(r)}if(0!=i.length){for(var o=-1*Number((e/i.length).toFixed(1)),s=0,l=0;l<i.length;l++)s+=i[l].increment(o);this._handleRemainder(s,t)}}},e.prototype.setValues=function(e){this.resetting=!0;for(var t in e)e.hasOwnProperty(t)&&this._sliderLookup[t].setValAndDropDown(e[t][0],e[t][1]);this.resetting=!1},e.prototype.getSum=function(){for(var e=0,t=0;t<this._sliderList.length;t++){var i=this._sliderList[t];e+=Number(i.weight.toFixed(1))}return e},e.prototype.getParams=function(){for(var e={},t=0;t<this._sliderList.length;t++){var i=this._sliderList[t];e[i.selectedParam]=Number(i.weight.toFixed(1))}return e},e.prototype._addEventListeners=function(){var e=this;this.$container.find('input[type="range"]').change(function(){if(!e.resetting){var t=r(this),i=this.id,l=e._sliderLookup[i],o=parseFloat(t.val()),s=l.weight,a=o-s;a=Number(a.toFixed(1)),l.weight=Number(o.toFixed(1)),e._handleRemainder(a,i);var n=Number(e.getSum().toFixed(1));if(n>100)e:for(;;)for(var h=0;h<e._sliderList.length;h++){var u=e._sliderList[h];if(u.domId!=i&&!u.locked&&!u.atMin&&(u.increment(-.1),n-=.1,"100.0"==n.toFixed(1)))break e}else if(n<100)e:for(;;)for(var h=0;h<e._sliderList.length;h++){var u=e._sliderList[h];if(u.domId!=i&&!u.locked&&!u.atMax&&(u.increment(.1),n+=.1,"100.0"==n.toFixed(1)))break e}e._$presetSelector.val("0"),e._runChangedCallback()}}),r(".show-select").change(function(){e.resetting||(e._sliderLookup[this.id.replace("_chg","")].selectedParam=r(this).val(),e._$presetSelector.val("0"),e._runChangedCallback())}),this.$container.find('input[type="checkbox"]').change(function(){var t=this;e._sliderLookup[t.id.replace("_chk","")].locked=!t.checked,e.reservedPercent=0,e.notLockedCount=0;for(var i=[],l=0;l<e._sliderList.length;l++){var r=e._sliderList[l];r.locked?e.reservedPercent+=r.weight:(i.push(r),e.notLockedCount++)}for(var l=0;l<e._sliderList.length;l++){var r=e._sliderList[l];r.locked||(r.max=100-e.reservedPercent)}if(1==i.length)i[0].min=i[0].weight;else for(var l=0;l<i.length;l++)i[l].min=0})},Object.defineProperty(e.prototype,"paramWeightsRegionVersion",{get:function(){return{paramWeights:this.getParams(),region:this._$regionSelector.val(),mmVersion:this._$versionSelector.val()}},enumerable:!0,configurable:!0}),e}();t.TipSliders=n,o.Sliders=n,t.default=n},42:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l=i(23),r=i(1);i(15),t.tipConfig={$loadingGif:r("#loading-gif"),$presetSelector:r("#preset-selector"),$regionSelector:r("#region-selector"),$versionSelector:r("#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},{column:"aadtyr_20",value:7},{column:"growth_20",value:7},{column:"trkdyr_1",value:4},{column:"losyr_1",value:12},{column:"losyr_20",value:12},{column:"crash_rate",value:15},{column:"crash_severity",value:13},{column:"weather",value:9},{column:"event",value:11}]},{label:"Safety",presets:[{column:"aadtyr_1",value:20},{column:"aadtyr_20",value:0},{column:"growth_20",value:0},{column:"trkdyr_1",value:0},{column:"losyr_1",value:0},{column:"losyr_20",value:0},{column:"crash_rate",value:40},{column:"crash_severity",value:40},{column:"weather",value:0},{column:"event",value:0}]},{label:"Mobility Present",presets:[{column:"aadtyr_1",value:25},{column:"aadtyr_20",value:25},{column:"growth_20",value:0},{column:"trkdyr_1",value:25},{column:"losyr_1",value:25},{column:"losyr_20",value:0},{column:"crash_rate",value:0},{column:"crash_severity",value:0},{column:"weather",value:0},{column:"event",value:0}]},{label:"Mobility Future",presets:[{column:"aadtyr_1",value:0},{column:"aadtyr_20",value:25},{column:"growth_20",value:25},{column:"trkdyr_1",value:25},{column:"losyr_1",value:0},{column:"losyr_20",value:25},{column:"crash_rate",value:0},{column:"crash_severity",value:0},{column:"weather",value:0},{column:"event",value:0}]},{label:"Service",presets:[{column:"aadtyr_1",value:30},{column:"aadtyr_20",value:0},{column:"growth_20",value:10},{column:"trkdyr_1",value:0},{column:"losyr_1",value:30},{column:"losyr_20",value:30},{column:"crash_rate",value:0},{column:"crash_severity",value:0},{column:"weather",value:0},{column:"event",value:0}]},{label:"Freight Performance",presets:[{column:"aadtyr_1",value:20},{column:"aadtyr_20",value:0},{column:"growth_20",value:0},{column:"trkdyr_1",value:60},{column:"losyr_1",value:20},{column:"losyr_20",value:0},{column:"crash_rate",value:0},{column:"crash_severity",value:0},{column:"weather",value:0},{column:"event",value:0}]}]},t.tipConfig.$presetSelector.append('<option value="0" disabled=>Custom</option>');var o=new l.TipSliders(t.tipConfig.slidersConfig,t.tipConfig.presetConfig,"slider-container",t.tipConfig.$presetSelector,t.tipConfig.$regionSelector,t.tipConfig.$regionSelector,function(e){console.log(e)});window.glob=o,window.hat=o,window.bird=o}});
 //# sourceMappingURL=slider-test.js.map
\ No newline at end of file
diff --git a/test-html/js/slider-test.js.map b/test-html/js/slider-test.js.map
index 357e857a153caf0bb68dc1e6dd49d40f25381e9d..ff04da6fee98eb3f65733eea246b4aa08157e160 100644
--- a/test-html/js/slider-test.js.map
+++ b/test-html/js/slider-test.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 9d917383084b0fd3dca4?08e3*******","webpack:///./src/_test/slider-test.ts","webpack:///./src/util/provide.ts?5c82*****","webpack:///external \"$\"?57aa*****","webpack:///./src/collections/Sliders.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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d917383084b0fd3dca4","/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';\r\nimport $ = require('jquery');\r\nimport ol = require('custom-ol');\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// ./src/_test/slider-test.ts","/**\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 = 5\n// module chunks = 0 2 3 4 5 7 8","/**\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"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///slider-test.js","webpack:///webpack/bootstrap 95f473b09da6d84b9b8b?0e3d***","webpack:///../../src/util/provide.ts?0b57***","webpack:///external \"$\"?57aa***","webpack:///external \"jquery-ui\"?42af","webpack:///../../src/collections/Sliders.ts","webpack:///../../src/_test/slider-test.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","provide","namespace","window","parts","split","nameSpace","length","util","default","1","$","15","jquery","ui","23","provide_1","nm","TipPresets","conf","this","label","presets","domId","replace","toLowerCase","theSum","_i","_a","_Slider","sliderConfig","_dropdownSelection","_weight","_locked","_min","_max","labelLow","labelHigh","labelVal","slider","chk","atMin","atMax","sel","yearOptions","itm","column","selectedParamDefault","selectedParam","html","addToDom","$container","append","selectionBox","increment","delta","remainder","Number","toFixed","val","setValAndDropDown","newVal","min","max","weight","locked","set","prop","attr","TipSliders","sliderConfigs","presetConfig","divId","presetSelector","regionSelector","versionSelector","chgCallback","_this","resetting","reservedPercent","addClass","_changedCallback","_$presetSelector","_$regionSelector","_$versionSelector","_sliderList","_sliderLookup","sld","push","_presetArray","_presetLookup","preset","idx","_lockedList","_inRangeList","_atMinList","_atMaxList","lockedCount","notLockedCount","_splitSliderArray","change","setPresetValues","_runChangedCallback","trigger","_addEventListeners","paramWeightsRegionVersion","chg","thePreset","presetValues","theSlider","_handleRemainder","remain","skipDomId","canChangeArray","inc","newRemainder","setValues","keyValList","k","getSum","total","getParams","paramWeights","___this","find","$this","sldr","newValue","parseFloat","oldValue","diff","sum","loop1","domEl","id","checked","notLockedSliders","region","mmVersion","Sliders","42","Sliders_1","tipConfig","$loadingGif","$presetSelector","$regionSelector","$versionSelector","tipSegmentLayerMinZoom","slidersConfig","sliders","console","log"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,MDMMC,EACA,SAAUxB,EAAQD,EAASH,GAEjC,YE/DA,SAAA6B,GAAiBC,GAEc,SAAhBC,OAAW,KAClBA,OAAW,MAMf,KAAK,GAHDC,GAAQF,EAAUG,MAAM,KACxBC,EAAYH,OAAW,GAElB1B,EAAE,EAAGA,EAAG2B,EAAMG,OAAQ9B,IAAI,CAGP,SAFR6B,EAAUF,EAAM3B,MAG5B6B,EAAUF,EAAM3B,QAGpB6B,EAAYA,EAAUF,EAAM3B,IAGhC,MAAO6B,GFiDXnB,OAAOC,eAAeb,EAAS,cAAgBO,OAAO,IE9CtDmB,EAAQ,QACRE,OAAW,GAAEK,KAAKP,QAAUA,EAE5B1B,EAAAkC,QAAeR,GFwETS,EACA,SAAUlC,EAAQD,GG5GxBC,EAAAD,QAAAoC,GHkHMC,GACA,SAAUpC,EAAQD,GInHxBC,EAAAD,QAAAsC,OAAAC,IJyHMC,GACA,SAAUvC,EAAQD,EAASH,GAEjC,YAKAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GK7HtD,IAAAkC,GAAA5C,EAAA,GACAuC,EAAAvC,EAAA,GAEI6C,EAAKD,EAAAP,QAAQ,eAuBjBS,EAAA,WAKI,QAAAA,GAAYC,GACRC,KAAKC,MAAQF,EAAKE,MAClBD,KAAKE,QAAUH,EAAKG,QACpBF,KAAKG,MAAQH,KAAKC,MAAMG,QAAQ,KAAM,IAAIC,aAI1C,KAAe,GAFXC,GAAS,EAEEC,EAAA,EAAAC,EAAAR,KAAKE,QAALK,EAAAC,EAAArB,OAAAoB,IAAY,CACvBD,GADOE,EAAAD,GACM7C,MAGjB,GAAc,KAAV4C,EACA,KAAM,iCAGlB,MAAAR,MAGAW,EAAA,WA4BI,QAAAA,GAAYC,GACRV,KAAKW,mBAAqB,KAC1BX,KAAKY,QAAU,KACfZ,KAAKpC,KAAO8C,EAAaT,MACzBD,KAAKG,MAAQH,KAAKpC,KAAKyC,cAAcD,QAAQ,KAAM,KAEnDJ,KAAKa,SAAU,EAEfb,KAAKc,KAAO,EACZd,KAAKe,KAAO,IAEZf,KAAKgB,SAAW,KAChBhB,KAAKiB,UAAY,KACjBjB,KAAKkB,SAAW,KAChBlB,KAAKmB,OAAS,KACdnB,KAAKoB,IAAM,KAEXpB,KAAKqB,OAAQ,EACbrB,KAAKsB,OAAQ,CAKb,KAAK,GAFDC,GAAM,mBAAqD,GAAnCb,EAAac,YAAYrC,OAAc,gBAAkB,eAAa,SAASa,KAAKG,MAAK,SAE5G9C,EAAI,EAAGA,EAAIqD,EAAac,YAAYrC,OAAQ9B,IAAK,CACtD,GAAIoE,GAAMf,EAAac,YAAYnE,EACnCkE,IAAO,kBAAkBE,EAAIC,OAAM,KAAKD,EAAIxB,MAAK,YAErDsB,GAAO,YAEPvB,KAAK2B,qBAAuB3B,KAAK4B,cAEjC5B,KAAK6B,KAAO,uCACO7B,KAAKG,MAAK,8BAA8BH,KAAKpC,KAAI,WAChE2D,EAAM,kBACQvB,KAAKG,MAAK,+DACVH,KAAKG,MAAK,6CACVH,KAAKG,MAAK,qEACVH,KAAKG,MAAK,8CACVH,KAAKG,MAAK,cAAcH,KAAKG,MAAK,yCAsJ5D,MA/IIM,GAAAjC,UAAAsD,SAAA,SAASC,GACLA,EAAWC,OAAOhC,KAAK6B,MACvB7B,KAAKgB,SAAWzB,EAAE,IAAIS,KAAKG,MAAK,QAChCH,KAAKiB,UAAY1B,EAAE,IAAIS,KAAKG,MAAK,SACjCH,KAAKkB,SAAW3B,EAAE,IAAIS,KAAKG,MAAK,QAChCH,KAAKmB,OAAS5B,EAAE,IAAIS,KAAKG,OACzBH,KAAKiC,aAAe1C,EAAE,IAAIS,KAAKG,MAAK,QACpCH,KAAKoB,IAAM7B,EAAE,IAAIS,KAAKG,MAAK,SAQ/BM,EAAAjC,UAAA0D,UAAA,SAAUC,GACN,GAAIC,GAAY,CAoBhB,OAnBAD,GAAQE,OAAOF,EAAMG,QAAQ,IAE7BtC,KAAKY,SAAWuB,EACZnC,KAAKY,QAAUZ,KAAKc,MACpBsB,EAAYpC,KAAKc,KAAOd,KAAKY,QAC7BZ,KAAKY,QAAUZ,KAAKc,KACpBd,KAAKqB,OAAQ,GACNrB,KAAKY,QAAUZ,KAAKe,MAC3BqB,EAAYpC,KAAKe,KAAOf,KAAKY,QAC7BZ,KAAKY,QAAUZ,KAAKe,KACpBf,KAAKsB,OAAQ,IAEbtB,KAAKqB,OAAQ,EACbrB,KAAKsB,OAAQ,GAGjBtB,KAAKmB,OAAOoB,IAAIvC,KAAKY,QAAQ0B,QAAQ,IACrCtC,KAAKkB,SAASW,KAAK7B,KAAKY,QAAQ0B,QAAQ,GAAK,KAEtCF,GAQX3B,EAAAjC,UAAAgE,kBAAA,SAAkBC,EAAgBb,GAC9B5B,KAAK0C,IAAM,EACX1C,KAAK2C,IAAM,IACX3C,KAAK4C,OAASH,EACdzC,KAAKmB,OAAOoB,IAAIE,EAAOH,QAAQ,IAC/BtC,KAAKiC,aAAaM,IAAIX,GACtB5B,KAAK4B,cAAgBA,EACrB5B,KAAK6C,QAAS,GAOlB9E,OAAAC,eAAIyC,EAAAjC,UAAA,UL6DAL,IK7DJ,WACI,MAAO6B,MAAKa,SLmEZiC,IK5DJ,SAAWP,GACPvC,KAAKa,QAAU0B,EACfvC,KAAKmB,OAAO4B,KAAK,WAAY/C,KAAKa,SAClCb,KAAKiC,aAAac,KAAK,WAAY/C,KAAKa,SACxCb,KAAKoB,IAAI2B,KAAK,WAAY/C,KAAKa,UL8D/B3C,YAAY,EACZD,cAAc,IKxDlBF,OAAAC,eAAIyC,EAAAjC,UAAA,OL+DAL,IK/DJ,WACI,MAAO6B,MAAKc,MLqEZgC,IK9DJ,SAAQL,GACJzC,KAAKc,KAAOuB,OAAOI,EAAOH,QAAQ,IAC9BtC,KAAKc,KAAO,IACZd,KAAKc,KAAO,GAEhBd,KAAKgB,SAASa,KAAK7B,KAAKc,KAAKwB,QAAQ,IACrCtC,KAAKmB,OAAO6B,KAAK,MAAOhD,KAAKc,KAAKwB,QAAQ,IAC1CtC,KAAKqB,MAAQrB,KAAKY,SAAWZ,KAAKc,MLgElC5C,YAAY,EACZD,cAAc,IK1DlBF,OAAAC,eAAIyC,EAAAjC,UAAA,OLiEAL,IKjEJ,WACI,MAAO6B,MAAKe,MLuEZ+B,IKhEJ,SAAQL,GACJzC,KAAKe,KAAOsB,OAAOI,EAAOH,QAAQ,IAC9BtC,KAAKe,KAAO,MACZf,KAAKe,KAAO,KAEhBf,KAAKiB,UAAUY,KAAK7B,KAAKe,KAAKuB,QAAQ,IACtCtC,KAAKmB,OAAO6B,KAAK,MAAOhD,KAAKe,KAAKuB,QAAQ,IAC1CtC,KAAKsB,MAAQtB,KAAKY,SAAWZ,KAAKe,MLkElC7C,YAAY,EACZD,cAAc,IK5DlBF,OAAAC,eAAIyC,EAAAjC,UAAA,ULmEAL,IKnEJ,WACI,MAAO6B,MAAKY,SLyEZkC,IKlEJ,SAAWL,GACPzC,KAAKY,QAAUyB,OAAOI,EAAOH,QAAQ,IACrCtC,KAAKkB,SAASW,KAAK7B,KAAKY,QAAQ0B,QAAQ,GAAK,KACzCtC,KAAKY,SAAWZ,KAAKc,MACrBd,KAAKqB,OAAQ,EACbrB,KAAKsB,OAAQ,GACNtB,KAAKY,SAAWZ,KAAKe,MAC5Bf,KAAKqB,OAAQ,EACbrB,KAAKsB,OAAQ,IAEbtB,KAAKqB,OAAQ,EACbrB,KAAKsB,OAAQ,ILuEjBpD,YAAY,EACZD,cAAc,IKrEtBwC,IAEAZ,GAAGY,QAAUA,CAMb,IAAAwC,GAAA,WAgCI,QAAAA,GAAYC,EAAuCC,EACvCC,EAAeC,EAAwBC,EAAwBC,EAC/DC,GAFZ,GAAAC,GAAAzD,IAIIA,MAAK0D,WAAY,EACjB1D,KAAK2D,gBAAkB,EACvB3D,KAAK+B,WAAaxC,EAAE,IAAM6D,GAC1BpD,KAAK+B,WAAW6B,SAAS,oBAEzB5D,KAAK6D,iBAAyC,kBAAfL,GAA4BA,EAAc,aAEzExD,KAAK8D,iBAAmBT,EACxBrD,KAAK+D,iBAAmBT,EACxBtD,KAAKgE,kBAAoBT,EAEzBvD,KAAKiE,eACLjE,KAAKkE,gBAEL,KAAK,GAAI7G,GAAI,EAAGA,EAAI6F,EAAc/D,OAAQ9B,IAAK,CAC3C,GAAI8G,GAAM,GAAI1D,GAAQyC,EAAc7F,GACpC2C,MAAKiE,YAAYG,KAAKD,GACtBnE,KAAKkE,cAAcC,EAAIhE,OAASgE,EAChCA,EAAIrC,SAAS9B,KAAK+B,YAGtB/B,KAAKqE,gBACLrE,KAAKsE,gBAEL,KAAK,GAAIjH,GAAI,EAAGA,EAAI8F,EAAahE,OAAQ9B,IAAK,CAC1C,GAAIkH,GAAS,GAAIzE,GAAWqD,EAAa9F,IAErCmH,GAAOnH,EAAI,GAAGiF,SAElBtC,MAAKsE,cAAcE,GAAOD,EAC1BvE,KAAKqE,aAAaD,KAAKG,GACvBvE,KAAK8D,iBAAiB9B,OAAO,kBAAkBwC,EAAG,KAAKD,EAAOtE,MAAK,aAIvED,KAAKyE,eACLzE,KAAK0E,gBACL1E,KAAK2E,cACL3E,KAAK4E,cAEL5E,KAAK6E,YAAc,GACnB7E,KAAK8E,eAAiB,EAEtB9E,KAAK+E,oBAGL/E,KAAK8D,iBAAiBkB,OAAO,WACzBvB,EAAKwB,kBACLxB,EAAKyB,wBAGTlF,KAAK+D,iBAAiBiB,OAAO,WACzBvB,EAAKyB,wBAGTlF,KAAKgE,kBAAkBgB,OAAO,WAC1BvB,EAAKyB,wBAGTlF,KAAK8D,iBAAiBqB,QAAQ,UAE9BnF,KAAKoF,qBAmRb,MAhRInC,GAAAzE,UAAA0G,oBAAA,WACIlF,KAAK6D,iBAAiB7D,KAAKqF,4BAG/BtH,OAAAC,eAAIiF,EAAAzE,UAAA,mBL2BAL,IK3BJ,WACI,MAAO6B,MAAK6D,kBL6BZf,IK1BJ,SAAoBwC,GAChBtF,KAAK6D,iBAAmByB,EACxBtF,KAAKkF,uBL4BLhH,YAAY,EACZD,cAAc,IK1BlBgF,EAAAzE,UAAAyG,gBAAA,WAKI,IAAK,GAJDT,GAAMxE,KAAK8D,iBAAiBvB,OAAS,IAErCgD,EAAYvF,KAAKsE,cAAcE,GAE1BnH,EAAI,EAAGA,EAAIkI,EAAUrF,QAAQf,OAAQ9B,IAAK,CAC/C,GAAImI,GAAeD,EAAUrF,QAAQ7C,GACjCoI,EAAYzF,KAAKiE,YAAY5G,EAEjCoI,GAAU5C,QAAS,EACnB4C,EAAUjD,kBAAkBgD,EAAa9H,MAAO8H,EAAa9D,UAQrEuB,EAAAzE,UAAAuG,kBAAA,WACI/E,KAAKyE,eACLzE,KAAK0E,gBACL1E,KAAK2E,cACL3E,KAAK4E,aAEL,KAAK,GAAIvH,GAAI,EAAGA,EAAI2C,KAAKiE,YAAY9E,OAAQ9B,IAAK,CAC9C,GAAI8G,GAAMnE,KAAKiE,YAAY5G,EAEvB8G,GAAItB,OACJ7C,KAAKyE,YAAYL,KAAKD,GACfA,EAAI9C,MACXrB,KAAK2E,WAAWP,KAAKD,GACdA,EAAI7C,MACXtB,KAAK4E,WAAWR,KAAKD,GAErBnE,KAAK0E,aAAaN,KAAKD,GAG/BnE,KAAK6E,YAAc7E,KAAKyE,YAAYtF,OACpCa,KAAK8E,eAAiB9E,KAAKiE,YAAY9E,OAASa,KAAK6E,aASzD5B,EAAAzE,UAAAkH,iBAAA,SAAiBC,EAAQC,GAGrB,GAAc,IADdD,EAAStD,OAAOsD,EAAOrD,QAAQ,KAC/B,CAIAtC,KAAK+E,mBAGL,KAAK,GADDc,MACKxI,EAAI,EAAGA,EAAI2C,KAAK0E,aAAavF,OAAQ9B,IAAK,CAC/C,GAAI8G,GAAMnE,KAAK0E,aAAarH,EACxB8G,GAAIhE,OAASyF,GAGjBC,EAAezB,KAAKD,GAGxB,GAAIwB,EAAS,EACT,IAAK,GAAItI,GAAI,EAAGA,EAAI2C,KAAK4E,WAAWzF,OAAQ9B,IAAK,CAC7C,GAAI8G,GAAMnE,KAAK4E,WAAWvH,EACtB8G,GAAIhE,OAASyF,GAGjBC,EAAezB,KAAKD,OAGxB,KAAK,GAAI9G,GAAI,EAAGA,EAAI2C,KAAK2E,WAAWxF,OAAQ9B,IAAK,CAC7C,GAAI8G,GAAMnE,KAAK2E,WAAWtH,EACtB8G,GAAIhE,OAASyF,GAGjBC,EAAezB,KAAKD,GAI5B,GAA6B,GAAzB0B,EAAe1G,OAAnB,CAOA,IAAK,GAHD2G,IAAM,EAAKzD,QAAQsD,EAASE,EAAe1G,QAAQmD,QAAQ,IAE3DyD,EAAe,EACV1I,EAAI,EAAGA,EAAIwI,EAAe1G,OAAQ9B,IACvC0I,GAAgBF,EAAexI,GAAG6E,UAAU4D,EAGhD9F,MAAK0F,iBAAiBK,EAAcH,MAOxC3C,EAAAzE,UAAAwH,UAAA,SAAUC,GACNjG,KAAK0D,WAAY,CACjB,KAAK,GAAIwC,KAAKD,GACNA,EAAWxH,eAAeyH,IAC1BlG,KAAKkE,cAAcgC,GAAG1D,kBAAkByD,EAAWC,GAAG,GAAID,EAAWC,GAAG,GAGhFlG,MAAK0D,WAAY,GAOrBT,EAAAzE,UAAA2H,OAAA,WAEI,IAAK,GADDC,GAAQ,EACH/I,EAAI,EAAGA,EAAI2C,KAAKiE,YAAY9E,OAAQ9B,IAAK,CAC9C,GAAI8G,GAAMnE,KAAKiE,YAAY5G,EAC3B+I,IAAS/D,OAAO8B,EAAIvB,OAAON,QAAQ,IAGvC,MAAO8D,IAOXnD,EAAAzE,UAAA6H,UAAA,WAEI,IAAK,GADDC,MACKjJ,EAAI,EAAGA,EAAI2C,KAAKiE,YAAY9E,OAAQ9B,IAAK,CAC9C,GAAI8G,GAAMnE,KAAKiE,YAAY5G,EAC3BiJ,GAAanC,EAAIvC,eAAiBS,OAAO8B,EAAIvB,OAAON,QAAQ,IAGhE,MAAOgE,IAGXrD,EAAAzE,UAAA4G,mBAAA,WACI,GAAImB,GAAUvG,IAIdA,MAAK+B,WAAWyE,KAAK,uBAAuBxB,OAAO,WAC3C,IAAIuB,EAAQ7C,UAAZ,CAIA,GAAI+C,GAAQlH,EAAES,MACVG,EAAQH,KAAS,GACjB0G,EAAOH,EAAQrC,cAAc/D,GAE7BwG,EAAWC,WAAWH,EAAMlE,OAE5BsE,EAAWH,EAAK9D,OAChBkE,EAAOH,EAAWE,CACtBC,GAAOzE,OAAOyE,EAAKxE,QAAQ,IAE3BoE,EAAK9D,OAASP,OAAOsE,EAASrE,QAAQ,IAEtCiE,EAAQb,iBAAiBoB,EAAM3G,EAG/B,IAAI4G,GAAM1E,OAAOkE,EAAQJ,SAAS7D,QAAQ,GAE1C,IAAIyE,EAAM,IACNC,EACI,OACI,IAAK,GAAI3J,GAAI,EAAGA,EAAIkJ,EAAQtC,YAAY9E,OAAQ9B,IAAK,CACjD,GAAI8G,GAAMoC,EAAQtC,YAAY5G,EAC9B,IAAI8G,EAAIhE,OAASA,IAASgE,EAAItB,SAAUsB,EAAI9C,QAG5C8C,EAAIjC,WAAU,IACd6E,GAAO,GACe,SAAlBA,EAAIzE,QAAQ,IACZ,KAAM0E,OAInB,IAAID,EAAM,IACbC,EACI,OACI,IAAK,GAAI3J,GAAI,EAAGA,EAAIkJ,EAAQtC,YAAY9E,OAAQ9B,IAAK,CACjD,GAAI8G,GAAMoC,EAAQtC,YAAY5G,EAC9B,IAAI8G,EAAIhE,OAASA,IAASgE,EAAItB,SAAUsB,EAAI7C,QAG5C6C,EAAIjC,UAAU,IACd6E,GAAO,GACe,SAAlBA,EAAIzE,QAAQ,IACZ,KAAM0E,GAM1BT,EAAQzC,iBAAiBvB,IAAI,KAC7BgE,EAAQrB,yBAKhB3F,EAAE,gBAAgByF,OAAO,WACjBuB,EAAQ7C,YAGZ6C,EAAQrC,cAAclE,KAAS,GAAEI,QAAQ,OAAQ,KAAKwB,cAAgBrC,EAAES,MAAMuC,MAE9EgE,EAAQzC,iBAAiBvB,IAAI,KAE7BgE,EAAQrB,yBAKZlF,KAAK+B,WAAWyE,KAAK,0BAA0BxB,OAAO,WAClD,GAAIiC,GAAQjH,IAEZuG,GAAQrC,cAAc+C,EAAMC,GAAG9G,QAAQ,OAAQ,KAAKyC,QAAUoE,EAAME,QACpEZ,EAAQ5C,gBAAkB,EAC1B4C,EAAQzB,eAAiB,CAIzB,KAAK,GAFDsC,MAEK/J,EAAI,EAAGA,EAAIkJ,EAAQtC,YAAY9E,OAAQ9B,IAAK,CACjD,GAAI8G,GAAMoC,EAAQtC,YAAY5G,EAC1B8G,GAAItB,OACJ0D,EAAQ5C,iBAAmBQ,EAAIvB,QAGnCwE,EAAiBhD,KAAKD,GACtBoC,EAAQzB,kBAGZ,IAAK,GAAIzH,GAAI,EAAGA,EAAIkJ,EAAQtC,YAAY9E,OAAQ9B,IAAK,CACjD,GAAI8G,GAAMoC,EAAQtC,YAAY5G,EAC1B8G,GAAItB,SAGRsB,EAAIxB,IAAM,IAAM4D,EAAQ5C,iBAG5B,GAA+B,GAA3ByD,EAAiBjI,OACjBiI,EAAiB,GAAG1E,IAAM0E,EAAiB,GAAGxE,WAE9C,KAAK,GAAIvF,GAAI,EAAGA,EAAI+J,EAAiBjI,OAAQ9B,IACzC+J,EAAiB/J,GAAGqF,IAAM,KAO1C3E,OAAAC,eAAIiF,EAAAzE,UAAA,6BLXAL,IKWJ,WACI,OAAQmI,aAActG,KAAKqG,YACvBgB,OAAQrH,KAAK+D,iBAAiBxB,MAAiB+E,UAAWtH,KAAKgE,kBAAkBzB,QLTrFrE,YAAY,EACZD,cAAc,IKUtBgF,IApXa9F,GAAA8F,aAsXbpD,EAAG0H,QAAUtE,EACb9F,EAAAkC,QAAe4D,GLFTuE,GACA,SAAUpK,EAAQD,EAASH,GAEjC,YAEAe,QAAOC,eAAeb,EAAS,cAAgBO,OAAO,GM5oBtD,IAAA+J,GAAAzK,EAAA,IACAuC,EAAAvC,EAAA,EAEAA,GAAA,IAmBaG,EAAAuK,WACTC,YAAapI,EAAE,gBACfqI,gBAAiBrI,EAAE,oBACnBsI,gBAAiBtI,EAAE,oBACnBuI,iBAAkBvI,EAAE,qBACpBwI,uBAAwB,GACxBC,gBAEY/H,MAAO,OACPuB,cACKvB,MAAO,IAAKyB,OAAQ,eAIzBzB,MAAO,cACPuB,cACKvB,MAAO,IAAKyB,OAAQ,aACpBzB,MAAO,KAAMyB,OAAQ,cACrBzB,MAAO,KAAMyB,OAAQ,cACrBzB,MAAO,KAAMyB,OAAQ,gBAI1BzB,MAAO,SACPuB,cACKvB,MAAO,IAAKyB,OAAQ,aACpBzB,MAAO,KAAMyB,OAAQ,cACrBzB,MAAO,KAAMyB,OAAQ,cACrBzB,MAAO,KAAMyB,OAAQ,gBAI1BzB,MAAO,QACPuB,cACKvB,MAAO,IAAKyB,OAAQ,aACpBzB,MAAO,KAAMyB,OAAQ,gBAI1BzB,MAAO,MACPuB,cACKvB,MAAO,IAAKyB,OAAQ,cAIzBzB,MAAO,aACPuB,cACKvB,MAAO,IAAKyB,OAAQ,YACpBzB,MAAO,KAAMyB,OAAQ,aACrBzB,MAAO,KAAMyB,OAAQ,aACrBzB,MAAO,KAAMyB,OAAQ,eAI1BzB,MAAO,aACPuB,cACKvB,MAAO,EAAGyB,OAAQ,iBAIvBzB,MAAO,WACPuB,cACKvB,MAAO,EAAGyB,OAAQ,qBAIvBzB,MAAO,UACPuB,cACKvB,MAAO,EAAGyB,OAAQ,cAIvBzB,MAAO,QACPuB,cACKvB,MAAO,EAAGyB,OAAQ,YAInCyB,eAEYlD,MAAO,cACPC,UACKwB,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,UAAWhE,MAAO,KAC1BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,aAAchE,MAAO,KAC7BgE,OAAQ,iBAAkBhE,MAAO,KACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,OAI7BuC,MAAO,SACPC,UACKwB,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,aAAchE,MAAO,KAC7BgE,OAAQ,iBAAkBhE,MAAO,KACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,MAI7BuC,MAAO,mBACPC,UACKwB,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,YAAahE,MAAO,KAC5BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,UAAWhE,MAAO,KAC1BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,aAAchE,MAAO,IAC7BgE,OAAQ,iBAAkBhE,MAAO,IACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,MAI7BuC,MAAO,kBACPC,UACKwB,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,YAAahE,MAAO,KAC5BgE,OAAQ,YAAahE,MAAO,KAC5BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,aAAchE,MAAO,IAC7BgE,OAAQ,iBAAkBhE,MAAO,IACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,MAI7BuC,MAAO,UACPC,UACKwB,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,YAAahE,MAAO,KAC5BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,UAAWhE,MAAO,KAC1BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,aAAchE,MAAO,IAC7BgE,OAAQ,iBAAkBhE,MAAO,IACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,MAI7BuC,MAAO,sBACPC,UACKwB,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,YAAahE,MAAO,IAC5BgE,OAAQ,WAAYhE,MAAO,KAC3BgE,OAAQ,UAAWhE,MAAO,KAC1BgE,OAAQ,WAAYhE,MAAO,IAC3BgE,OAAQ,aAAchE,MAAO,IAC7BgE,OAAQ,iBAAkBhE,MAAO,IACjCgE,OAAQ,UAAWhE,MAAO,IAC1BgE,OAAQ,QAAShE,MAAO,OAO7CP,EAAAuK,UAAUE,gBAAgB5F,OAAO,8CAEjC,IAAIiG,GAAU,GAAIR,GAAAxE,WAAW9F,EAAAuK,UAAUM,cAAe7K,EAAAuK,UAAUvE,aAAc,mBAC1EhG,EAAAuK,UAAUE,gBAAiBzK,EAAAuK,UAAUG,gBAAiB1K,EAAAuK,UAAUG,gBAAiB,SAACvC,GAAS4C,QAAQC,IAAI7C,IAI3GvG,QAAa,KAAIkJ,EACjBlJ,OAAY,IAAIkJ,EAChBlJ,OAAa,KAAIkJ","file":"slider-test.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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 = 42);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\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    var parts = namespace.split('.');\r\n    var nameSpace = window['gv'];\r\n    for (var i = 0; i < parts.length; i++) {\r\n        var newObject = nameSpace[parts[i]];\r\n        if (typeof newObject == 'undefined') {\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n    return nameSpace;\r\n}\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\nexports.default = provide;\r\n\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = jquery-ui;\n\n/***/ }),\n\n/***/ 23:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar provide_1 = __webpack_require__(0);\r\nvar $ = __webpack_require__(1);\r\nvar nm = provide_1.default('collections');\r\nvar TipPresets = (function () {\r\n    function TipPresets(conf) {\r\n        this.label = conf.label;\r\n        this.presets = conf.presets;\r\n        this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n        var theSum = 0;\r\n        for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\r\n            var pr = _a[_i];\r\n            theSum += pr.value;\r\n        }\r\n        if (theSum != 100) {\r\n            throw 'preset sum does note equal 100';\r\n        }\r\n    }\r\n    return TipPresets;\r\n}());\r\nvar _Slider = (function () {\r\n    /**\r\n     * Slider constructor\r\n     * @param sliderConfig - the configuration\r\n\r\n     */\r\n    function _Slider(sliderConfig) {\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        this._locked = false;\r\n        this._min = 0.0;\r\n        this._max = 100;\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        this.atMin = false;\r\n        this.atMax = false;\r\n        var sel = \"<select class=\\\"\" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + \"\\\" id=\\\"\" + this.domId + \"_chg\\\">\";\r\n        for (var i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n            var itm = sliderConfig.yearOptions[i];\r\n            sel += \"<option value=\\\"\" + itm.column + \"\\\">\" + itm.label + \"</option>\";\r\n        }\r\n        sel += '</select>';\r\n        this.selectedParamDefault = this.selectedParam;\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     * add html to dom\r\n     * @param {jQuery} $container - container element\r\n     */\r\n    _Slider.prototype.addToDom = function ($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     * 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    _Slider.prototype.increment = function (delta) {\r\n        var remainder = 0;\r\n        delta = Number(delta.toFixed(1));\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        }\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        }\r\n        else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n        this.slider.val(this._weight.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n        return remainder;\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    _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) {\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    Object.defineProperty(_Slider.prototype, \"locked\", {\r\n        /**\r\n         *\r\n         * @returns {boolean} if locked\r\n         */\r\n        get: function () {\r\n            return this._locked;\r\n        },\r\n        /**\r\n         *\r\n         * @param {boolean} val if locked\r\n         */\r\n        set: function (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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(_Slider.prototype, \"min\", {\r\n        /**\r\n         *\r\n         * @returns {number} the minimum\r\n         */\r\n        get: function () {\r\n            return this._min;\r\n        },\r\n        /**\r\n         *\r\n         * @param {number} newVal new minimum\r\n         */\r\n        set: function (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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(_Slider.prototype, \"max\", {\r\n        /**\r\n         *\r\n         * @returns {number} the maximum\r\n         */\r\n        get: function () {\r\n            return this._max;\r\n        },\r\n        /**\r\n         *\r\n         * @param {number} newVal the maximum\r\n         */\r\n        set: function (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        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(_Slider.prototype, \"weight\", {\r\n        /**\r\n         *\r\n         * @returns {number} the weight\r\n         */\r\n        get: function () {\r\n            return this._weight;\r\n        },\r\n        /**\r\n         *\r\n         * @param {number} newVal the weight\r\n         */\r\n        set: function (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            }\r\n            else if (this._weight >= this._max) {\r\n                this.atMin = false;\r\n                this.atMax = true;\r\n            }\r\n            else {\r\n                this.atMin = false;\r\n                this.atMax = false;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return _Slider;\r\n}());\r\nnm._Slider = _Slider;\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nvar TipSliders = (function () {\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    function TipSliders(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) {\r\n        var _this = this;\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        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { };\r\n        this._$presetSelector = presetSelector;\r\n        this._$regionSelector = regionSelector;\r\n        this._$versionSelector = versionSelector;\r\n        this._sliderList = [];\r\n        this._sliderLookup = {};\r\n        for (var i = 0; i < sliderConfigs.length; i++) {\r\n            var 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        this._presetArray = [];\r\n        this._presetLookup = {};\r\n        for (var i = 0; i < presetConfig.length; i++) {\r\n            var preset = new TipPresets(presetConfig[i]);\r\n            var idx = (i + 1).toFixed();\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        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n        this.lockedCount = 10;\r\n        this.notLockedCount = 0;\r\n        this._splitSliderArray();\r\n        this._$presetSelector.change(function () {\r\n            _this.setPresetValues();\r\n            _this._runChangedCallback();\r\n        });\r\n        this._$regionSelector.change(function () {\r\n            _this._runChangedCallback();\r\n        });\r\n        this._$versionSelector.change(function () {\r\n            _this._runChangedCallback();\r\n        });\r\n        this._$presetSelector.trigger('change');\r\n        this._addEventListeners();\r\n    }\r\n    TipSliders.prototype._runChangedCallback = function () {\r\n        this._changedCallback(this.paramWeightsRegionVersion);\r\n    };\r\n    Object.defineProperty(TipSliders.prototype, \"changedCallback\", {\r\n        get: function () {\r\n            return this._changedCallback;\r\n        },\r\n        set: function (chg) {\r\n            this._changedCallback = chg;\r\n            this._runChangedCallback();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    TipSliders.prototype.setPresetValues = function () {\r\n        var idx = this._$presetSelector.val() || '1';\r\n        var thePreset = this._presetLookup[idx];\r\n        for (var i = 0; i < thePreset.presets.length; i++) {\r\n            var presetValues = thePreset.presets[i];\r\n            var theSlider = this._sliderList[i];\r\n            theSlider.locked = true;\r\n            theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n        }\r\n    };\r\n    /**\r\n     * split array into subarrays holding the sliders\r\n     * @private\r\n     */\r\n    TipSliders.prototype._splitSliderArray = function () {\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n        for (var i = 0; i < this._sliderList.length; i++) {\r\n            var sld = this._sliderList[i];\r\n            if (sld.locked) {\r\n                this._lockedList.push(sld);\r\n            }\r\n            else if (sld.atMin) {\r\n                this._atMinList.push(sld);\r\n            }\r\n            else if (sld.atMax) {\r\n                this._atMaxList.push(sld);\r\n            }\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     * 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    TipSliders.prototype._handleRemainder = function (remain, skipDomId) {\r\n        remain = Number(remain.toFixed(1));\r\n        if (remain == 0) {\r\n            return;\r\n        }\r\n        this._splitSliderArray();\r\n        var canChangeArray = [];\r\n        for (var i = 0; i < this._inRangeList.length; i++) {\r\n            var sld = this._inRangeList[i];\r\n            if (sld.domId == skipDomId) {\r\n                continue;\r\n            }\r\n            canChangeArray.push(sld);\r\n        }\r\n        if (remain > 0) {\r\n            for (var i = 0; i < this._atMaxList.length; i++) {\r\n                var sld = this._atMaxList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        }\r\n        else {\r\n            for (var i = 0; i < this._atMinList.length; i++) {\r\n                var 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        if (canChangeArray.length == 0) {\r\n            return;\r\n        }\r\n        var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n        var newRemainder = 0;\r\n        for (var i = 0; i < canChangeArray.length; i++) {\r\n            newRemainder += canChangeArray[i].increment(inc);\r\n        }\r\n        this._handleRemainder(newRemainder, skipDomId);\r\n    };\r\n    /**\r\n     *\r\n     * @param {object} keyValList key and value list\r\n     */\r\n    TipSliders.prototype.setValues = function (keyValList) {\r\n        this.resetting = true;\r\n        for (var 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     * get the weight sum\r\n     * @returns {number} the weight sum\r\n     */\r\n    TipSliders.prototype.getSum = function () {\r\n        var total = 0;\r\n        for (var i = 0; i < this._sliderList.length; i++) {\r\n            var sld = this._sliderList[i];\r\n            total += Number(sld.weight.toFixed(1));\r\n        }\r\n        return total;\r\n    };\r\n    /**\r\n     * get the parameter weights\r\n     * @returns {object} lookup with parameter weights\r\n     */\r\n    TipSliders.prototype.getParams = function () {\r\n        var paramWeights = {};\r\n        for (var i = 0; i < this._sliderList.length; i++) {\r\n            var sld = this._sliderList[i];\r\n            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n        }\r\n        return paramWeights;\r\n    };\r\n    TipSliders.prototype._addEventListeners = function () {\r\n        var ___this = this;\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            var $this = $(this);\r\n            var domId = this['id'];\r\n            var sldr = ___this._sliderLookup[domId];\r\n            var newValue = parseFloat($this.val());\r\n            var oldValue = sldr.weight;\r\n            var diff = newValue - oldValue;\r\n            diff = Number(diff.toFixed(1));\r\n            sldr.weight = Number(newValue.toFixed(1));\r\n            ___this._handleRemainder(diff, domId);\r\n            //cleanup, make sure the sum is still 100\r\n            var sum = Number(___this.getSum().toFixed(1));\r\n            if (sum > 100) {\r\n                loop1: while (true) {\r\n                    for (var i = 0; i < ___this._sliderList.length; i++) {\r\n                        var 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            }\r\n            else if (sum < 100) {\r\n                loop1: while (true) {\r\n                    for (var i = 0; i < ___this._sliderList.length; i++) {\r\n                        var 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            ___this._$presetSelector.val('0');\r\n            ___this._runChangedCallback();\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            ___this._$presetSelector.val('0');\r\n            ___this._runChangedCallback();\r\n        });\r\n        //lock the slider and update the reserved percent\r\n        this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n            var domEl = this;\r\n            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;\r\n            ___this.reservedPercent = 0.0;\r\n            ___this.notLockedCount = 0;\r\n            var notLockedSliders = [];\r\n            for (var i = 0; i < ___this._sliderList.length; i++) {\r\n                var 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            for (var i = 0; i < ___this._sliderList.length; i++) {\r\n                var 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            if (notLockedSliders.length == 1) {\r\n                notLockedSliders[0].min = notLockedSliders[0].weight;\r\n            }\r\n            else {\r\n                for (var i = 0; i < notLockedSliders.length; i++) {\r\n                    notLockedSliders[i].min = 0;\r\n                }\r\n            }\r\n        });\r\n    };\r\n    Object.defineProperty(TipSliders.prototype, \"paramWeightsRegionVersion\", {\r\n        get: function () {\r\n            return { paramWeights: this.getParams(),\r\n                region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return TipSliders;\r\n}());\r\nexports.TipSliders = TipSliders;\r\nnm.Sliders = TipSliders;\r\nexports.default = TipSliders;\r\n\n\n/***/ }),\n\n/***/ 42:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nvar Sliders_1 = __webpack_require__(23);\r\nvar $ = __webpack_require__(1);\r\n__webpack_require__(15);\r\nexports.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    ],\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    ]\r\n};\r\nexports.tipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\nvar 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); });\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// slider-test.js"," \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 = 42);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 95f473b09da6d84b9b8b","/**\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 = jquery-ui;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jquery-ui\"\n// module id = 15\n// module chunks = 0 4 5","/**\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 '../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// ../../src/_test/slider-test.ts"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/specs/mySpec.ts b/test/specs/mySpec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..add0b35887e6eda41cd9f09bc2db20d89aedd119
--- /dev/null
+++ b/test/specs/mySpec.ts
@@ -0,0 +1,6 @@
+/**
+ * Created by glenn on 3/10/2017.
+ */
+
+
+describe('adfa', )
\ No newline at end of file
diff --git a/test/specs/spec.ts b/test/specs/spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b07eb758ad9fad55f703afa6e926cec206cfacce
--- /dev/null
+++ b/test/specs/spec.ts
@@ -0,0 +1,3 @@
+/**
+ * Created by glenn on 3/10/2017.
+ */
diff --git a/tsconfig.json b/tsconfig.json
index 54b05de58113c23fc6c6f116255543923d35c865..5822c25bc000de8319da0daee14a6f0f152a6e7b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -4,9 +4,9 @@
   "compilerOptions": {
     "module": "commonjs",
     "declaration": true,
-    "outDir": "dist",
+    "outDir": "./dist",
     "target": "es5",
-    "rootDir": "src",
+    "rootDir": "./src",
     "sourceMap": true,
     "inlineSources": true,
     "jsx": "react"
diff --git a/webpack.config.js b/webpack.config.js
index 1dd8767249c071924f87a4e0ae97df85dc7dcf12..a3c81fd42fb9a7bcab181bb43729e0569247a081 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -32,6 +32,7 @@ module.exports = {
         "jquery": "$",
         "custom-ol": "ol",
         "react": "React",
-        "react-dom": "ReactDOM"
+        "react-dom": "ReactDOM",
+        "jquery-ui": true
     }
 };